media [video, audio, plugins, canvas] • Cancellation of pages on certain corner cases. • Minimizing server side effects. • Mutations to shared local storage [cookies, sessionStorage, etc.] Main concerns: credit: https://www.chromium.org/developers/design-documents/prerender
an HTTP/HTTPS scheme, either on the initial link or during any server-side or client- side redirects. For example, both ftp are canceled. Content scripts are allowed to run on prerendered pages. • window.opener would be non-null when the page is navigated to. • A download is triggered. The download is cancelled before it starts. • A request is issued which is not a GET, HEAD, POST, OPTIONS, or TRACE. • A authentication prompt would appear. • An SSL Client Certificate is requested and requires the user to select a certificate. • A script tries to open a new window. • alert() is called. • window.print() is called. • Any of the resources on the page are flagged by Safe Browsing as malware or phishing. • The fragment on the page does not match the navigated-to location.
… browser/base/content/browser.xul browser/base/content/tabbrowser.xml toolkit/content/widgets/browser.xml toolkit/content/widgets/remote-browser.xml browser/base/content/global-scripts.inc browser/base/content/browser.js browser/base/content/content.js major source files Usually referred as “gBrowser”
Document objects are presented to the user. The docshell is the toplevel object responsible for managing a single browsing context. credit: https://developer.mozilla.org/en-US/docs/Inner_and_outer_windows
is its session history. Session history consists of a flat list of session history entries. Session history entry = URL + state + title + Document + form data + scroll position + …, etc. interface History { readonly attribute long length; readonly attribute any state; void go(optional long delta); void back(); void forward(); void pushState(any data, DOMString title, optional DOMString? url = null); void replaceState(any data, DOMString title, optional DOMString? url = null); };
of two JSObjects: an inner object and an outer object. The inner window object is different for each page a browser window visits. It serves as the "globals" object and provides the JSPrincipals for scripts on that page. The outer window object is the object returned by window.open. It represents the window or tab itself and survives as the user navigates in that window or tab. The inner window => HTML5 Window object. The outer window => HTML5 WindowProxy object.
Process-per-tab • Single process credit: https://www.chromium.org/developers/design-documents/process-models http://www.aosabook.org/en/posa/high-performance-networking-in-chrome.html
are always in the same process. http://w3c.github.io/html/single-page.html#groupings-of-browsing-contexts • Chromium only swaps renderer processes for browser-initiated cross-site navigations, such as typing a URL in the location bar or following a bookmark (unless using rel=noreferrer target=_blank). • Subframes are currently rendered in the same process as their parent page (OOPIF is ongoing). • There is a limit to the number of renderer processes that Chromium will create.
related similar- origin browsing context. http://w3c.github.io/html/single-page.html#units-of- related-similar-origin-browsing-contexts • Support more JS-IPC excluding those need access to page content. • On the way to Site Isolation. https://www.chromium.org/developers/design- documents/site-isolation credit: https://www.chromium.org/developers/design-documents/oop-iframes