Patent ID: 12204740

In an embodimentFIG.13is a block diagram of an example processor-based computer system that may be used to implement various embodiments.

The features and advantages of the embodiments described herein will become more apparent from the detailed description set forth below when taken in conjunction with the drawings, in which like reference characters identify corresponding elements throughout. In the drawings, like reference numbers generally indicate identical, functionally similar, and/or structurally similar elements. The drawing in which an element first appears is indicated by the leftmost digit(s) in the corresponding reference number.

DETAILED DESCRIPTION

I. Introduction

The following detailed description discloses numerous example embodiments. The scope of the present patent application is not limited to the disclosed embodiments, but also encompasses combinations of the disclosed embodiments, as well as modifications to the disclosed embodiments.

References in the specification to “one embodiment,” “an embodiment,” “an example embodiment,” etc., indicate that the embodiment described may include a particular feature, structure, or characteristic, but every embodiment may not necessarily include the particular feature, structure, or characteristic. Moreover, such phrases are not necessarily referring to the same embodiment. Further, when a particular feature, structure, or characteristic is described in connection with an embodiment, it is submitted that it is within the knowledge of one skilled in the art to effect such feature, structure, or characteristic in connection with other embodiments whether or not explicitly described.

In the discussion, unless otherwise stated, adjectives such as “substantially” and “about” modifying a condition or relationship characteristic of a feature or features of an embodiment of the disclosure, are understood to mean that the condition or characteristic is defined to within tolerances that are acceptable for operation of the embodiment for an application for which it is intended.

Numerous exemplary embodiments are described as follows. It is noted that any section/subsection headings provided herein are not intended to be limiting. Embodiments are described throughout this document, and any type of embodiment may be included under any section/subsection. Furthermore, embodiments disclosed in any section/subsection may be combined with any other embodiments described in the same section/subsection and/or a different section/subsection in any manner.

II. Example Embodiments

As described above, as web browsers have progressed over the years, enterprises have developed content that takes advantage of the increasing capability of the advancing web browsers as well as the capabilities of new web browsers. In some cases, content, such as a web application, developed for a particular web browser type and/or browser version has not been updated to be compatible with more modern web browsers and/or browser versions. Accordingly, such content may be incompatible with newer web browsers and/or browser versions, and thus is forced to be run in less advanced browser types and/or versions. This is inconvenient for users who are forced to maintain old versions of web browsers so that the content incompatible with more recent browser technology can continue to be accessed.

In the case of a web application, a potential solution to this problem is that the web application be given dual solutions, meaning that multiple versions of the web application are developed and maintained (e.g., for each browser type/version of interest). However, such an approach consumes resources and time. Furthermore, users would need to know which browser version is compatible with which web application version. Another solution introduces the notion of auto-switching, where web applications would open up a new browser application and switch to that browser application based on a specification format that allowed administrators to specify a list of web app sites and the compatible browsers. However, this solution is visible to the user and very distracting. Another solution introduces the notion of invoking a new browser window for a browser compatible with a web app from an open browser window for an incompatible browser in which the web app was attempted to be opened. While this may be an improvement over other solutions, it has shortfalls including the need to switch between separate browsers in separate windows.

Embodiments described herein help address these and other issues related to content compatibility with web browsers. In particular, embodiments described herein enable an integrated approach to running web applications with various compatibilities that do not require third-party extensions or sacrifice user experience. In embodiments, when a page of an application incompatible with a first web browser is to be executed, an instance of a second web browser with which the page is compatible is separately invoked and/or executed without opening a window for that second browser. Instead, the second browser opens a page within the window of the first browser. This enables an effective and efficient user experience by enabling the running of different web applications that have different web browser compatibilities in a same browser window. Moreover, rendering and/or contextual information for a page opened via the second browser is provided to the first browser. Such information is utilized by the first browser to provide a visual experience to the user in which the web page is being hosted by the first browser, even though it is in fact being hosted by the second browser.

Such embodiments may be implemented in various ways. For instance,FIG.1AandFIG.1Bshow block diagrams of a system100for managing page compatibility between a first (primary) browser104and a second (secondary) browser106, according to an example embodiment. As shown inFIG.1AandFIG.1B, system100includes a computing device102that includes first browser104and a second browser106. First browser104includes a first render engine120and a multi-browser tab manager108, and has an open browser window110. Second browser106includes a second render engine122and a host browser interface112. InFIG.1A, second browser106has invoked a running instance (or process) of itself, referred to as second browser (first instance)106A. Furthermore, browser window110includes a tab114displaying a first page116that is rendered by second render engine122of second browser (first instance)106A. InFIG.1B, no instance of second browser106executes. Instead, tab114displays a second page118rendered by first render engine120of first browser104.FIGS.1A and1Bare further described as follows.

Computing device102is a computing device via which a user is enabled to run applications and visit web pages compatible with various web browsers. Computing device102may be any type of mobile computing device, such as a Microsoft® Surface® device, a personal digital assistant (PDA), a laptop computer, a notebook computer, a tablet computer such as an Apple iPad™, a netbook, a smart phone (such as an Apple iPhone, a phone implementing the Google® Android™ operating system, etc.), a wearable computing device (e.g., a head-mounted device including smart glasses such as Google® Glass™, a virtual headset such as Oculus Rift® by Oculus VR, LLC or HoloLens® by Microsoft Corporation, etc.), a stationary computing device such as a desktop computer or PC (personal computer), or other browser-enabled device.

First browser104and second browser106are web browsers, which are software applications configured for accessing information on the World Wide Web. For instance, first browser104and second browser106may be configured to receive links to web pages, to retrieve the web pages at the addresses indicated by the links, and to render pages for display to a user of computing device102. Examples of first browser104and second browser106include Internet Explorer® or Microsoft Edge®, both developed by Microsoft Corp. of Redmond, Washington, Mozilla Firefox®, developed by Mozilla Corp. of Mountain View, California, Safari®, developed by Apple Inc. of Cupertino, California, and Google® Chrome™ developed by Google Inc. of Mountain View, California. In embodiments, first and second browsers104and106are different from each other. For instance, first and second browsers104and106may be different web browser types (e.g., Google® Chrome™ and Microsoft Edge®). Alternatively, first and second browsers104and106may be different versions of a same web browser. Moreover, second browser106may be integrated into and considered to be a component of an operating system executing on computing device102.

As shown inFIGS.1A and1B, second browser106comprises a host browser interface112and a multi-tab manager128. Multi-tab manager128(also referred to as the browser frame layer) may be configured to manage one or more tabs (e.g., tab126). Tab126may comprise a web browser control124and/or other layers of functionality. Web browser control124(also referred to as WebOC) enables browsing, document viewing, and data downloading capabilities to second browser106. It enables the user to browse sites via the Internet, as well as folders in the local file system of computing device102and on a network. Web browser control124supports Web browsing through both point-and-click hyperlinking and uniform resource locator (URL) navigation. Web pages shown via multi-tab manager128, tab126, and/or web browser control124are rendered via second render engine122.

First render engine120and second render engine122of first browser104and second browser106, respectively, are each configured to generate a display of content in browser tabs of browser windows, including transforming HTML (hypertext markup language) documents and other resources of a web page into an interactive visual representation. In an embodiment, each of first and second engines120and122may be configured to perform page layout and rendering of content. Examples of browser engines include Gecko™ used in the Mozilla Firefox® web browser, the WebKit™ engine used by the Apple Safari browser, Trident™ (MSHTML) used in Internet Explorer™, and Blink™ used in the Google Chrome and Microsoft Edge Browsers.

Note that second browser106shown in dotted line represents the executable file(s) for second browser106that may be invoked to generate executing instances (or processes) of second browser106, such as second browser (first instance)106A shown inFIG.1A. It is noted that executing instances of second browser106do include host browser interface112, multi-tab manager128, tab126, web browser control124, and second render engine122, even though they are not shown illustrated in such instances for reasons of brevity.

As described above, web pages may be compatible with some browsers but not others. For instance, first page116may be compatible with second browser106but not compatible with first browser104. In such case, an instance of second browser106, such as second browser (first instance)106A ofFIG.1A, may be invoked to render first page116within browser window110of first browser104. In this way, pages compatible with second browser106, but not with first browser104, may still be displayed to users within first browser104without opening a separate browser window for second browser106, thus providing an improved user experience. This may be accomplished in various ways.

In particular, first browser104includes multi-browser tab manager108. Multi-browser tab manager108is configured to receive navigation requests to pages of web applications and determine whether a page to which such a request is directed is compatible with second browser106but not first browser104, such as by conferring with a browser compatibility list. The browser compatibility list may list particular items of content, web applications, file extensions, and/or other identifiers for content that second browser106is compatible with (e.g., is capable of rendering) and that first browser104is not compatible with. If multi-browser tab manager108determines that a requested page is compatible with first browser104(e.g., is not identified in the browser compatibility list as incompatible with first browser104), then first browser104receives the web address and renders the page within first browser104as normal. However, if multi-browser tab manager108determines that the page is compatible with second browser106, but not first browser104(e.g., is identified in the browser compatibility list as compatible with second browser106but incompatible with first browser104), then second browser (first instance)106A is invoked to receive the web address of the page and to render the page within first browser104.

For example, an interface of multi-browser tab manager108of first browser104may issue an invocation request (e.g., an API call) to second browser106that causes second browser (first instance)106A to be invoked and to be hosted by first browser104. The invocation request may include one or more parameters (e.g., command line parameter(s)) that cause second browser (first instance)106A to load host browser interface112. For instance, the parameter(s) may specify the name of host browser interface112and/or a location from which to load host browser interface112. The invocation request may be sent via an API call, or in another manner, which when received by second browser106, causes second browser106to invoke second browser (first instance)106A. Host browser interface112may be hooked into multi-tab manager128, thereby providing the functionality of multi-tab manager128, tab126, web browser control124and/or second render engine122within first browser104. Such functionality includes, but is not limited to, virtual tab (or “vtab” switching), browser helper objects (BHOs), and/or other extensions. Vtab switching is functionality that enables content launched in a new tab to appear to be rendered in the same tab from which the new tab was launched. For example, suppose a web page in a first secure container (e.g., an enterprise's private webpage) displays a URL for a web page hosted by a second secure container (e.g., a public web page hosted externally to the enterprise network). When the URL is clicked on, a new tab is launched to display the content of the web page corresponding to the URL. However, with vtab switching, it is made to appear as is if the web page is being rendered in the same tab in which the enterprise web page is rendered. Host browser interface112may be implemented as a dynamic link library (DLL), which is loaded into the process of second browser's (first instance)106A (e.g., from a DLL library stored on computing device102) in response to first browser104invoking second browser106.

Note that when second browser (first instance)106A is invoked, second browser (first instance)106A does not open a browser window as normally would occur. Instead, such a browser window opening is suppressed. The invocation request may include a parameter specifying that second browser (first instance)106A does not open a browser window, but instead instructing second browser (first instance)106A to direct any rendering and/or contextual information for a page to first browser104, so the page may be opened in the open tab of first browser104in which the initial navigation request was received. The rendering information and/or contextual information may be provided to first browser104via host browser interface112.

Host browser interface112of second browser (first instance)106A may be further configured to receive navigation requests inside pages opened by second browser (first instance)106A in tab114, and determine whether pages to which such requests are directed are compatible with second browser106but not first browser104. For instance, host browser interface112may confer with a browser compatibility list to make the determination. The browser compatibility list accessed by host browser interface112may be the same page compatibility used by multi-browser tab manager108or a different one. Upon determination that a page is compatible with second browser106and not first browser104, host browser interface112renders the page hosted within tab114of first browser104, again without opening a browser window for second browser (first instance)106A.

For instance, as shown inFIG.1A, first page116was determined to be compatible with second browser106, but not first browser104. As such, browser window110of first browser104displays first page116within tab114, rendered there by second render engine122of second browser (first instance)106A. Alternatively, as shown inFIG.1B, a second page118(opened from a link within first page116, or by a history navigation) was determined to be compatible with first browser104. As such, browser window110displays second page118within tab114, rendered there by first render engine120. In the case ofFIG.1B, because second page118is compatible with first browser104, second browser (first instance)106A is not needed and may therefore be closed, thereby freeing up memory and reducing processor demand in computing device102.

Accordingly, pages may be opened in tab114by first browser104or instances of second browser106, depending on browser capability for the pages, in any page sequence.

FIG.2shows a flowchart200of a method in a computing device for hosting a browser within another browser, according to an example embodiment. In an embodiment, flowchart200may be implemented by multi-browser tab manager108of first browser104. For purposes of illustration, flowchart200is described with continued reference toFIG.1. Other structural and operational embodiments will be apparent to persons skilled in the relevant art(s) based on the following discussion.

Flowchart200ofFIG.2begins with step202. In step202, a first browser is executed in the computing device, the first browser having an open browser window. For instance, as shown inFIG.1A, first browser104executes in computing device102. First browser104has browser window110open. In embodiments, a user of computing device102may have invoked first browser104, or first browser104may have been invoked by the invocation of a web application.

In step204, a request is received at the first browser to navigate to a first page. For instance, and with reference toFIG.1A, multi-browser tab manager108may receive a request to navigate to first page116. In embodiments, the navigation request may be initiated by a user of computing device102, such as by a link click in a currently opened page in tab114or other open tab (causing tab114to open), or by a history navigation (e.g., by the user selecting a browser back button or forward button) with tab114the active tab. The navigation request includes an address to first page116, such as in the form of a uniform resource location (URL) or other address type.

In step206, a determination is made that the first page is incompatible with the first browser and compatible with a second browser. In an embodiment, multi-browser tab manager108may be configured to determine that first page116is compatible with second browser106and incompatible with first browser104.

In embodiments, multi-browser tab manager108may determine that the first page is compatible with the first browser or the second browser based on an administrator defined list, such as by accessing a browser compatibility list as described above. However, this is not intended to be limiting and multi-browser tab manager108may make this determination in other ways, as would be apparent to persons skilled in the relevant art(s) from the teachings herein.

In step208, the first browser sends an invocation request to invoke an instance of the second browser. For example, with reference toFIG.1A, multi-browser tab manager108may send an invocation request to second browser106. For instance, invocation request may be sent via an API call, and second browser106may include an API interface configured to receive the API call.

In step210, responsive to receiving the invocation request, a host browser interface for the instance of the second browser is loaded by the instance of the second browser, the host browser interface being coupled to a browser frame layer of the instance of the second browser. For example, with reference toFIG.1A, responsive to receiving the invocation request, host browser interface112for second browser (first instance)106A is loaded by second browser (first instance)106A. Host browser interface112is coupled to browser frame layer128of second browser (first instance)106A, thereby enabling first browser104to host the functionality of browser frame layer128, tab126, web browser control124and/or second render engine122.

In step212, the instance of the second browser is executed under control by the first browser without a browser window opening for the instance of the second browser. For example, with reference toFIG.1A, second browser (first instance)106A is executed under control by first browser104without a browser window opening for second browser (first instance)106A.

In accordance with one or more embodiments, an address of the first page is provided to the instance of the second browser, and the instance of the second browser renders the first page, the first page being hosted within a tab in the browser window of the first browser. For example, with reference toFIG.1A, an address of first page116is provided to second browser (first instance)106A, and second browser (first instance)106A renders first page116within tab114in browser window110of first browser104.

In accordance with one or more embodiments, host browser interface112is a DLL loaded at initialization of second browser (first instance)106A.

In accordance with one or more embodiments, functionality of the instance of the second browser is hosted within the first browser, the functionality including at least one of virtual tab switching, browser helper objects, and one or more browser extensions.

As described above, second browser (first instance)106A provides rendering information and/or contextual information for a page being rendered by second render engine122to first browser104. The information is utilized by first browser104to provide a visual experience to the user in which the web page is being hosted by first browser104, even though it is in fact being hosted by second browser (first instance)106A. The foregoing is described below.

A. Navigation URLs

Suppose a user viewing a web page (via second browser (first instance)106A) that includes a URL to another web page (e.g., another incompatible web page). When a user clicks on the URL, first browser104may indicate URL in its address bar. Thus, in accordance with an embodiment, host browser interface114provides the URL to first browser104upon the user clicking on the URL and/or upon second browser (first instance)106A navigating to that URL. In response to receiving the URL, first browser104causes the URL to be displayed in its address bar. Additional information may also be provided to first browser104. For instance, if the web page associated with the URL is secure (e.g., the web page utilizes a Secure Socket Layer (SSL) or Transport Layer Security (TLS)), host browser interface112may provide an indication to first browser104that the web page is secure, and first browser104may reflect this via its GUI. For instance, first browser104may display “https://” before the URL in its address bar. In another example, first browser104may display a lock icon via its GUI.

Similarly, when first browser104invokes second browser106to render an incompatible web page, first browser104provides the URL (and/or additional information, such as security information) to second browser106. First browser104may also provide a listing of URLs that were traversed via first browser104to host browser interface112of second browser (first instance)106A, and second browser (first instance)106may provide a listing of URLs that were traversed via second browser (first instance)106to first browser104. This enables first browser104and/or second browser (first instance)106to perform a navigation of history of URLs traversed by both first browser104and/or second browser (first instance)106. Additional details regarding the foregoing techniques is described in application Ser. No. 16/403,186, filed on May 3, 2019, and entitled “Page Display by Hosted Browser Within Controlling Browser,” the entirety of which is incorporated by reference.

FIG.3shows a flowchart300of a method for displaying, by a first browser, a navigation URL and/or a security indicator received from a second browser in accordance with an example embodiment. In an embodiment, flowchart300may be implemented by a system400shown inFIG.4, although the method is not limited to that implementation. As shown inFIG.4, system400includes a computing device402that includes first browser404and an instance of second browser406A. First browser404includes a first render engine420and a multi-browser tab manager408, and has an open browser window410that includes one or more tabs (e.g., tab414). Second browser406A includes a multi-tab manager428, second render engine422and a host browser interface412. Multi-tab manager428may be configured to manage one or more tabs (e.g., tab426). Tab426may comprise a web browser control424and/or other layers of functionality. Second render engine422may be managed by web browser control424. Computing device402, first browser404, multi-browser tab manager408, first render engine420, browser window410, tab414, second browser (first instance)406A, host browser interface412, multi-tab manager428, tab426, web browser control424, and second render engine422are examples of computing device102, first browser104, multi-browser tab manager108, first render engine120, browser window110, tab114, second browser (first instance)106A, host browser interface112, multi-tab manager128, tab126, web browser control124, and second render engine122, as respectively described above with reference toFIGS.1A and1B. In the embodiment shown inFIG.4, second browser (first instance)406A has traversed to another web page (e.g., page428), for example, via a user clicking on a hyperlink displayed on a first page (e.g., page116, shown inFIG.1A).

Flowchart300begins with step302. In step302, at least one of an address of a second page to which the instance of the second browser has traversed or a security indicator associated with the second page is provided to the first browser. For example, with reference toFIG.4, second browser (first instance)406A provides at least one of an address (e.g., a URL)401of a second page or a security indicator403associated with the second page to first browser404via host browser interface412

In step304, the second page is rendered by the instance of the second browser, the second page being hosted within the tab in the browser window of the first browser. For example, with reference toFIG.4, second render engine422of second browser (first instance)406A renders second page428. Second page428is hosted within tab414of browser window410of first browser404.

In step306, the at least one of the address via an address bar associated with the first browser or a graphical user interface element that is representative of the security indicator and that is associated with the first browser is displayed. For example, with reference toFIG.4, first render engine420renders address401(e.g., https://www.2ndpage.com) via an address bar430displayed via tab414and/or renders a graphical user interface element432that is representative of the security indicator403within address bar430. In the example shown inFIG.4, security indicator430indicates that second page428is a secure website. Accordingly, graphical user interface element432(which is shown as a lock) represents that second page428is secure. First render engine420renders its version of the lock, and not the version of the lock (or graphical user interface element used by second browser (first instance)406A to represent a secure website) utilized by second browser (first instance)606A, thereby enabling a seamless integration of second browser (first instance)406A within first browser404.

B. User Interface Element Control

Referring again toFIG.1, in accordance with an embodiment, host browser interface112may provide status information to first browser104. The status information may indicate whether a web page being loaded and/or rendered by second render engine112is large in size and/or is taking a long time to load. Based on the status information, first browser104causes a user interface element to be rendered to indicate the status. For example, the user interface element may be a spinning wheel or ring (also referred to as a “throbber”) utilized by first browser104. The user interface element utilized by second browser (first instance)106A to reflect this status (i.e., the second browser's version of the throbber) is not displayed. Instead, the user interface element utilized by first browser104is utilized.

In another example, the status information may indicate whether a web page being loaded and/or rendered by second render engine112is favorited by the user. Based on this information, first browser104causes a user interface element to be rendered to indicate the favorited status. For example, the user interface element may be a star shown in the address bar of first browser104. The user interface element utilized by second browser (first instance)106A to reflect this status (i.e., the second browser's version of the star) is not displayed. Instead, the user interface element utilized by first browser104is utilized. The foregoing techniques advantageously enables a seamless integration of second browser (first instance)106A within first browser104.

It is noted that the status information described above is purely exemplary and that the status information may include any type of information that first browser104utilize to display its own version of a particular user interface element.

FIG.5shows a flowchart500of a method for displaying, by a first browser, a graphical user interface element based on a status indicator received from a second browser in accordance with an example embodiment. In an embodiment, flowchart500may be implemented by a system600shown inFIG.6, although the method is not limited to that implementation. As shown inFIG.6, system600includes a computing device602that includes first browser604and an instance of second browser606A. First browser604includes a first render engine620and a multi-browser tab manager608, and has an open browser window610that includes one or more tabs (e.g., tab614). Second browser606A includes a multi-tab manager628, second render engine622and a host browser interface612. Multi-tab manager628may be configured to manage one or more tabs (e.g., tab626). Tab626may comprise a web browser control624and/or other layers of functionality. Second render engine622may be managed by web browser control624. Computing device602, first browser604, multi-browser tab manager608, first render engine620, browser window610, tab614, second browser (first instance)606A, host browser interface612, multi-tab manager628, tab626, web browser control624, and second render engine622are examples of computing device102, first browser104, multi-browser tab manager108, first render engine120, browser window110, tab114, second browser (first instance)106A, host browser interface112, multi-tab manager128, tab126, web browser control124, and second render engine122, as respectively described above with reference toFIGS.1A and1B. In the embodiment shown inFIG.6, second browser (first instance)606A has traversed to a first page (e.g., page616). Page616is an example of page116, as described above with reference toFIG.1A.

Flowchart500begins with step502. In step502, a status indicator indicative of a status of the first page being rendered by the instance of the second browser is received from the host browser interface. For example, with reference toFIG.6, second browser (first instance)606A provides a status indicator601indicative of a status of page616being rendered by second render engine622of second browser (first instance)606A via host browser interface612.

In step504, a graphical user interface element that is representative of the status indicator and that is associated with first browser is displayed. For example, with reference toFIG.6, first render engine620displays a graphical user interface element630representative of status indicator601and that is associated with first browser604. For example, status indicator601may indicate that page616is taking a long time to load. Accordingly, first render engine620displays a throbber (i.e., graphical user interface element630) in tab614to indicate to the user that page616is loading. First render engine620renders its version of the throbber, and not the version of the throbber utilized by second browser (first instance)606A, thereby enabling a seamless integration of second browser (first instance)606A within first browser604,

C. Watchdog Process

Referring again toFIG.1A, during initialization of second browser (first instance)106A, a watchdog process may be launched. The watchdog process may be configured to determine whether first browser104is still active (or open). For instance, during initialization first browser104may provide its process identification (PID) to second browser (first instance)106A via host browser interface112. The watchdog process may periodically monitor the PID to determine whether it is still pointing to first browser104. In the event that the PID is no longer pointing to first browser104(e.g., due to first browser104being closed due to first browser104self-terminating or crashing, etc.), the watchdog process may cause second browser (first instance)106A to terminate.

FIG.7shows a flowchart700of a method for monitoring a first browser in accordance with an example embodiment. In an embodiment, flowchart700may be implemented by a system800shown inFIG.8, although the method is not limited to that implementation. As shown inFIG.8, system800includes a computing device802that includes first browser804and an instance of second browser806A. First browser804includes a first render engine820and a multi-browser tab manager808, and has an open browser window810that includes one or more tabs (e.g., tab814). Second browser806A includes a multi-tab manager828, second render engine822and a host browser interface812. Multi-tab manager828may be configured to manage one or more tabs (e.g., tab826). Tab826may comprise a web browser control824and/or other layers of functionality. Second render engine822may be managed by web browser control824. Computing device802, first browser804, multi-browser tab manager808, first render engine820, browser window810, tab814, second browser (first instance)806A, host browser interface812, multi-tab manager828, tab826, web browser control824, and second render engine822are examples of computing device102, first browser104, multi-browser tab manager108, first render engine120, browser window110, tab114, second browser (first instance)106A, host browser interface112, multi-tab manager128, tab126, web browser control124, and second render engine122, as respectively described above with reference toFIGS.1A and1B. In the embodiment shown inFIG.8, second browser (first instance)806A has traversed to a first page (e.g., page816). Page816is an example of page116, as described above with reference toFIG.1A. As further shown inFIG.7, computing device802may also comprise a watchdog process830and an operating system832. Watchdog process830and operating system832execute on computing device802. Watchdog process830may be initiated responsive to first browser804being initiated.

Flowchart700begins with step702. In step702, a process identifier associated with the first browser is provided to the host browser interface by the first browser. For example, with reference withFIG.8, first browser804provides a process identification (e.g., PID801) to host browser interface812of second browser (first instance)806A.

In step704, a determination is made that the first browser is inactive based on the process identifier. For example, with reference toFIG.8, host browser interface812provides PID801to watchdog process830. Watchdog process830may periodically monitor PID801to determine whether it is still pointing to first browser804. Watchdog process830determines that first browser804is inactive when PID801is no longer pointing to first browser804(e.g., due to first browser804being closed due to first browser104self-terminating or crashing, etc.). Watchdog process830may receive the value of PID801continuously, or may check a value of PID801periodically or according to any other schedule.

In step706, in response to determining that the first browser is no longer active, the instance of the second browser is caused to be terminated. For example, with reference toFIG.8, in response to determining that first browser804is no longer active, watchdog process830provides a command803to operating system832. Responsive to receiving command803, operating system832terminates second browser (first instance)806A.

D. Accelerator Handling

Referring again toFIG.1A, accelerator handling starts with a keydown message on whatever thread has focus and iterates through various accelerator tables until a match is found, in which case it is ‘handled’ and the search for other matching accelerators stops. If an accelerator (also referred to as keyboard shortcuts, such as, but not limited to, Ctrl+C (to copy text), Ctrl+P (to paste text), etc.) is not handled, it will be forwarded to other threads to loop through more accelerator tables for handling until there are no threads left or it gets handled. An unhandled keydown accelerator is converted to a character and goes through another accelerator handling process before the character is delivered to the focused window.

Second browser (first instance)106A may define an accelerator as any key press, release or character when the “Ctrl” “Alt”, or “F1-F24” keys are pressed, and has special casing for handling key presses like “Tab” and “Esc.”

There may be multiple threads per window that handle accelerators, for example, the tab thread (e.g., tab126), the frame thread of second browser106(e.g., multi-tab manager128) and the frame thread of first browser104(e.g., multi-browser tab manager108). The thread that receives accelerator input is based on which window associated with the thread is in focus. For instance, if a web page is being rendered by second render engine122and the window in which the web page is being rendered is active, then that window will receive the accelerator input. Similarly, if a web page is being rendered by first render engine120and the window in which the web page is being rendered is active, then that window will receive the accelerator input.

If a window associated with second browser (first instance)106A receives accelerator input, second browser (first instance)106A may perform a particular action depending on the accelerator input received. For instance, in a scenario in which second browser (first instance)106A is running in a standalone mode (i.e., it is not invoked by first browser104), if the accelerator input matches accelerator input in a mapping for second browser (first instance)106A, then second browser (first instance)106A handles the accelerator input and performs the action corresponding to the accelerator input (as specified in the mapping). If there is no match, then second browser (first instance)106A drops the accelerator input.

In a scenario in which first browser104invokes second browser (first instance)106A, host browser interface112may provide the accelerator input to first browser104, and first browser104determines whether the accelerator input matches accelerator input in a mapping for first browser104. If the accelerator input matches accelerator input in a mapping for first browser104, then first browser104handles the accelerator input and performs the action corresponding to the accelerator input (as specified in the mapping). If there is no match, then first browser104drops the accelerator input.

In accordance with an embodiment, the accelerator input for a particular action performed by second browser (first instance)106A does not match the accelerator input for the same particular action performed by first browser104. In accordance with such an embodiment, first browser104may translate accelerator input received from second browser (first instance)106A into the accelerator input accepted by first browser104for that same action.

FIG.9shows a flowchart900of a method for handing, by a first browser, accelerator input received from a second browser in accordance with an example embodiment. In an embodiment, flowchart900may be implemented by a system1000shown inFIG.10, although the method is not limited to that implementation. As shown inFIG.10, system1000includes a computing device1002that includes first browser1004and an instance of second browser1006A. First browser1004includes a first render engine1020and a multi-browser tab manager1008, and has an open browser window1010that includes one or more tabs (e.g., tab1014). Second browser1006A includes a multi-tab manager1028, second render engine1022and a host browser interface1012. Multi-tab manager1028may be configured to manage one or more tabs (e.g., tab1026). Tab1026may comprise a web browser control1024and/or other layers of functionality. Second render engine1022may be managed by web browser control1024. Computing device1002, first browser1004, multi-browser tab manager1008, first render engine1020, browser window1010, tab1014, second browser (first instance)1006A, host browser interface1012, multi-tab manager1028, tab1026, web browser control1024, and second render engine1022are examples of computing device102, first browser104, multi-browser tab manager108, first render engine120, browser window110, tab114, second browser (first instance)106A, host browser interface112, multi-tab manager128, tab126, web browser control124, and second render engine122, as respectively described above with reference toFIGS.1A and1B. In the embodiment shown inFIG.10, second browser (first instance)1006A has traversed to a first page (e.g., page1016). Page1016is an example of page116, as described above with reference toFIG.1A. As further shown inFIG.7, first browser1004maintains an accelerator mapping1030. Accelerator mapping1030may be a data structure (e.g., a table) that maps different accelerator inputs to different actions.

Flowchart900begins with step902. In step902, a first accelerator input provided to the instance of the second browser is received from the host browser interface. For example, with reference toFIG.10, second browser (first instance)1006A may receive accelerator input (e.g., CTRL+C, CTRL+P, etc.) via an input device utilized by a user (e.g., a keyboard). First browser1004receives the accelerator input (shown as accelerator input1001) from second browser (first instance)1006A via host browser interface1012.

In step904, a determination is made as to whether the first accelerator input matches a second accelerator input stored in an accelerator mapping associated with the first browser. For example, with reference toFIG.10, first browser1004determine whether accelerator input1001matches an accelerator input stored in accelerator mapping1030associated with first browser1004. In response to determining that the first accelerator input matches an accelerator input stored in accelerator mapping1030, flow continues to step906. Otherwise, flow continues to step908.

In step906, the first browser performs an action corresponding to the first accelerator input. For example, with reference toFIG.10, first browser1004performs an action (e.g., copying text, rendering a print dialog screen, etc.) corresponding to first accelerator input1001.

In step908, the processing of the first accelerator input is bypassed. For example, with reference toFIG.10, first browser1004bypasses the processing of accelerator input1001. For example, first browser1004ignores or drops accelerator input1001, as it does not match any of the accelerator inputs maintained by accelerator mapping1030.

E. User Permissions

Referring again toFIG.1, first browser104and second browser106may maintain the same or different models for site permissions—permissions such as allowing/denying popups, allowing certain pages to use your physical location using geolocation APIs, and denying others, etc. For instance, first browser104and second browser106may not only maintain separate permissions but may have separate models. For example, second browser106may enable the user to configure swathes of sites in “zones” to be allowed or disallowed to use popups, and enable the user to individually add other sites to be allowed to provide popups even if it would normally be disallowed, but the user can't make an exception and disallow a site that would normally allow them. First browser104may allow the user to make both kinds of exceptions, and also adds the ability to do profile-based permissions, but doesn't really have zone-based permissions.

Embodiments described herein may project the settings of first browser104onto second browser (first instance)106A when second browser (first instance)106A is hosted by first browser104, merging second browser106's notion of zones with first browser104's notion of user profiles and sophisticated permissions overrides to create a permissions scheme that is compatible with the dual browser scenario. This involves parsing the permissions of first browser104for the current profile, transmitting them to host browser interface112of second browser (first instance)106A, merging them with the zone settings of second browser (first instance)106A, and altering second browser (first instance)106A to first look up the settings override when operating as an application being hosted by first browser104. This may be updated dynamically whenever a user changes a setting.

During initialization of second browser106, first browser104may provide its site permission settings (and a version number thereof) to second browser106via host browser interface112. Alternatively, second browser106may generate a version number for the received site permission settings. Multi-tab manager128may store the settings along with its version number. First browser104may provide updated site permission settings to second browser106responsive to the user changing the settings. Multi-tab manager128may store such updated site permission settings along with an updated version number.

When a content process (e.g., a window in which the web site is being rendered by second render engine122) requires site permission settings, it may retrieve the settings from multi-tab manager128and store them in its own permissions cache. The settings (and version thereof) for a particular user permission may be stored in its own permissions cache.

When a script executing on a particular web site being rendered by second browser (first instance)106A requests permission from a user (e.g., geolocation permissions), second browser (first instance)106A may first determine whether it has the most current permission settings. For instance, second browser (first instance)106A may determine whether the version number maintained by the permissions cache of the content process of second browser (first instance)106A matches the version number maintained by multi-tab manager128. If the version numbers match, second browser106checks the permission settings in the permissions cache to see if the user has already enabled geolocation sharing. If the version numbers do not match, multi-tab manager128may provide the updated configuration settings (and version number thereof) to the corresponding permissions cache.

If the permissions settings indicate that the user has in fact enabled geolocation sharing, then second browser106may provide a response indicating as such to the script. However, if permission settings indicate that the user has not enabled geolocation sharing, second browser (first instance)106may provide the request to first browser104via host browser interface112. The request may specify the prompt to be displayed to the user. First browser104renders a user interface control (e.g., a dialog box) that includes the prompt and one or more user interface elements for responding to the prompt (e.g., a “yes” button, a “no” button, etc.). Upon submitting a response, first browser104provides a response indicative of the user's selection to second browser106via host browser interface112. Second browser (first instance)106A then provides the response to the script. Accordingly, the user interface control utilized by second browser (first instance)106A to prompt the user for his or her geolocation (i.e., the second browser's version of the prompt) is not displayed. Instead, the user interface control utilized by first browser104is utilized. The foregoing techniques advantageously enables a seamless integration of second browser (first instance)106A within first browser104.

In another example, second browser (first instance)106may provide an indication to first browser104(via host browser interface112) to indicate whether a pop-up has been blocked by second browser106. Based on this information, first browser104causes a user interface element to be rendered to indicate that a pop-up has been blocked and may also enable the user to adjust the pop-up blocking settings with respect to the web site from which the pop-up was blocked. The user interface element utilized by second browser (first instance)106A to reflect this (i.e., the second browser's version of the pop-up blocker indicator) is not displayed. Instead, the user interface element utilized by first browser104is utilized. The foregoing techniques advantageously enables a seamless integration of second browser (first instance)106A within first browser104.

In accordance with an embodiment, second browser (first instance)106A may support zone-based security, where each website is categorized based on its website address as belonging to a particular zone, namely, Internet, intranet, trusted, or restricted. Second browser (first instance)106A uses the zone information for a given site to allow or deny that site the ability to perform some requested functionality. For example, because the Internet zone is considered less secure than the intranet zone, a webpage from the Internet zone is not allowed to display content (e.g., a pop-up), whereas a webpage from an intranet zone is allowed to display content.

In a scenario in which first browser104hosts second browser (first instance)106A, the zone-based security settings may take priority over the settings maintained by first browser104. For instance, when a permission setting is requested, second browser (first instance)106A may first determine whether it maintains a zone-based security setting for that permission. If such a setting exists, second browser (first instance)106A utilizes the setting. If such a setting doesn't exist, then second browser (first instance)106A utilizes the settings provided by first browser104.

In accordance with an embodiment, second browser (first instance)106A may maintain a first permissions cache for use in standalone mode and a second permissions cache for use when first browser104hosts second browser (first instance)106A. When executing in standalone mode, second browser (first instance)106A accesses the first permissions cache, which stores the permission settings for first browser106A. When second browser (first instance)106A is invoked by first browser104, second browser (first instance)106A utilizes the second permissions cache, which stores the permission settings of first browser104.

As indicated above, each permission setting may be associated with its own permission cache. For example, permission settings for geolocation may be maintained in one permission cache, whereas permission settings for pop-up blocking may be maintained in another permission cache. Each of these permission caches may be stored by domain name. For instance, the permission cache for geolocation may store geolocation settings for a plurality of different domain names. The permission cache may be sorted, for example, alphabetically by domain names. In accordance with an embodiment, second browser (first instance)106A performs a binary search to find permission settings associated with a particular domain name.

FIG.11shows a flowchart1100of a method for providing permission settings of a first browser to a second browser in accordance with an example embodiment. In an embodiment, flowchart1100may be implemented by systems1200A and1200B shown inFIGS.12A and12B, although the method is not limited to those implementations. As shown inFIGS.12A and12B, systems1200A and1200B include a computing device1202that includes first browser1204and an instance of second browser1206A. First browser1204includes a first render engine1220and a multi-browser tab manager1208, and has an open browser window1210that includes one or more tabs (e.g., tab1214). Second browser1206A includes a multi-tab manager1228, second render engine1222and a host browser interface1212. Multi-tab manager1228may be configured to manage one or more tabs (e.g., tab1226). Tab1226may comprise a web browser control1224and/or other layers of functionality. Second render engine1222may be managed by web browser control1224. Computing device1202, first browser1204, multi-browser tab manager1208, first render engine1220, browser window1210, tab1214, second browser (first instance)1206A, host browser interface1212, multi-tab manager1228, tab1226, web browser control1224, and second render engine1222are examples of computing device102, first browser104, multi-browser tab manager108, first render engine120, browser window110, tab114, second browser (first instance)106A, host browser interface112, multi-tab manager128, tab126, web browser control124, and second render engine122, as respectively described above with reference toFIGS.1A and1B. In the embodiments shown inFIGS.12A and12B, second browser (first instance)1206A has traversed to a first page (e.g., page1216). Page1216is an example of page116, as described above with reference toFIG.1A. As further shown inFIGS.12A and12B, second browser (first instance)1206A maintains a permissions cache1230and a permission authorizer1232, which is executed by computing device1202.

Flowchart1100begins with step1102. In step1102, permissions settings associated with the first browser are provided by the first browser to the host browser interface. For example, with reference toFIG.12A, first browser1204provides its permission settings1201to host browser interface1212of second browser (first instance)1206A. Permission settings1201may be provided to second browser (first instance)1206A when second browser (first instance)1206A is initialized. Permission settings1201may comprise a subset (e.g., some or all) of the settings maintained by first browser1204.

In step1104, the permission settings are stored by the second browser. For example, with reference toFIG.12A, second browser (first instance)1206A stores permission settings1201in permissions cache1230.

In step1106, a request from the first page for a permission to perform a particular action is received by the second browser. For example, with reference toFIG.12A, second browser (first instance)1206A may receive a request1203from page1216(e.g., a script executing on page1216) for a permission to perform a particular action (e.g., obtain a geolocation of computing device1202).

In step1108, a determination is made as to whether a permission setting of the permission settings authorizes the first page to perform the action. For example, with reference toFIG.12A, permission authorizer1232provides a query1211to permissions cache1230to determine whether a permission setting of permission settings1201stored in permissions cache1230authorizes page1216to perform an action. If a determination is made that the permission setting authorizes the first page to perform the action, flow continues to step1110. Otherwise, flow continues to step1112.

In step1110, a response to the first page that indicates that the first page is authorized to perform the particular action is provided by the second browser. For example, with reference toFIG.12A, second browser (first instance)106A provides a response1205to page1216that indicates that page1216is authorized to perform the particular action (e.g., obtain geolocation information).

In step1112, the second browser provides a request to the first browser to render a user interface element associated with the first browser that prompts a user for input, the input specifying whether the first page is authorized to perform the particular action. For example, with referenced toFIG.12B, second browser (first instance)1206A provides a request1207(via host browser interface1212) to render a user interface element1236that prompts a user for input. First render engine1210renders its version of user interface element1236, and not the version of the user interface element utilized by second browser (first instance)1206A, thereby enabling a seamless integration of second browser (first instance)1206A within first browser1204.

In step1114, a response indicative of the user's input is received by the first browser. For example, with reference toFIG.12B, first browser1204may receive an input from the user specifying whether or not permission is granted or denied.

In accordance with one or more embodiments, the permissions cache is updated with the corresponding permission setting. For example, with reference toFIG.12, permissions cache1230is updated with the corresponding permission setting.

In step1116, the first browser provides the response to the second browser. For example, with reference toFIG.12B, first browser1204provides a response1209that represents the user's input to second browser (first instance)1206A via host browser interface1212.

In step1118, the second browser provides the response to the first page. For example, with referenced toFIG.12B, second browser (first instance)1206A provides response1209to page1218.

III. Additional Embodiments

Referring again toFIG.1A, in certain embodiments, second browser106may not be properly invoked (e.g., host browser interface112is not properly loaded). This may occur, for example, if second browser106is an incorrect or older version and/or the operating system in which second browser106is incorporated is an incorrect or older version that does not support the browser hosting functionality described herein. In this case, second browser106is launched in a standalone mode (i.e., first browser104does not invoke second browser106and does not host second browser106).

IV. Example Computer System Implementation

Computing device102, first browser104, second browser106, second browser (first instance)106A, multi-browser tab manager108, first render engine120, tab114, host browser interface112, multi-tab manager128, tab126, web browser control124, second render engine122, computing device402, first browser404, second browser (first instance)406A, multi-browser tab manager408, first render engine420, tab414, host browser interface412, multi-tab manager428, tab426, web browser control424, second render engine422, computing device602, first browser604, second browser (first instance)606A, multi-browser tab manager608, first render engine620, tab614, host browser interface612, multi-tab manager628, tab626, web browser control624, second render engine622, computing device802, first browser804, second browser (first instance)806A, multi-browser tab manager808, first render engine820, tab814, host browser interface812, multi-tab manager828, tab826, web browser control824, second render engine822, watchdog process832, operating system834, computing device1002, first browser1004, second browser (first instance)1006A, multi-browser tab manager1008, first render engine1020, tab1014, host browser interface1012, multi-tab manager1028, tab1026, web browser control1024, second render engine1022, accelerator mapping1030, computing device1202, first browser1204, second browser (first instance)1206A, multi-browser tab manager1208, first render engine1220, tab1214, host browser interface1212, multi-tab manager1228, tab1226, web browser control1224, second render engine1222, permission analyzer1232, and permissions cache1230(and/or any of the components described therein), and/or flowchart200,300,500,700,900, and1100, may be implemented in hardware, or hardware combined with one or both of software and/or firmware. For example, computing device102, first browser104, second browser106, second browser (first instance)106A, multi-browser tab manager108, first render engine120, tab114, host browser interface112, multi-tab manager128, tab126, web browser control124, second render engine122, computing device402, first browser404, second browser (first instance)406A, multi-browser tab manager408, first render engine420, tab414, host browser interface412, multi-tab manager428, tab426, web browser control424, second render engine422, computing device602, first browser604, second browser (first instance)606A, multi-browser tab manager608, first render engine620, tab614, host browser interface612, multi-tab manager628, tab626, web browser control624, second render engine622, computing device802, first browser804, second browser (first instance)806A, multi-browser tab manager808, first render engine820, tab814, host browser interface812, multi-tab manager828, tab826, web browser control824, second render engine822, watchdog process832, operating system834, computing device1002, first browser1004, second browser (first instance)1006A, multi-browser tab manager1008, first render engine1020, tab1014, host browser interface1012, multi-tab manager1028, tab1026, web browser control1024, second render engine1022, accelerator mapping1030, computing device1202, first browser1204, second browser (first instance)1206A, multi-browser tab manager1208, first render engine1220, tab1214, host browser interface1212, multi-tab manager1228, tab1226, web browser control1224, second render engine1222, permission analyzer1232, and permissions cache1230(and/or any of the components described therein), and/or flowchart200,300,500,700,900, and1100may be implemented as computer program code/instructions configured to be executed in one or more processors and stored in a computer readable storage medium.

Alternatively, computing device102, first browser104, second browser106, second browser (first instance)106A, multi-browser tab manager108, first render engine120, tab114, host browser interface112, multi-tab manager128, tab126, web browser control124, second render engine122, computing device402, first browser404, second browser (first instance)406A, multi-browser tab manager408, first render engine420, tab414, host browser interface412, multi-tab manager428, tab426, web browser control424, second render engine422, computing device602, first browser604, second browser (first instance)606A, multi-browser tab manager608, first render engine620, tab614, host browser interface612, multi-tab manager628, tab626, web browser control624, second render engine622, computing device802, first browser804, second browser (first instance)806A, multi-browser tab manager808, first render engine820, tab814, host browser interface812, multi-tab manager828, tab826, web browser control824, second render engine822, watchdog process832, operating system834, computing device1002, first browser1004, second browser (first instance)1006A, multi-browser tab manager1008, first render engine1020, tab1014, host browser interface1012, multi-tab manager1028, tab1026, web browser control1024, second render engine1022, accelerator mapping1030, computing device1202, first browser1204, second browser (first instance)1206A, multi-browser tab manager1208, first render engine1220, tab1214, host browser interface1212, multi-tab manager1228, tab1226, web browser control1224, second render engine1222, permission analyzer1232, and permissions cache1230(and/or any of the components described therein), and/or flowchart200,300,500,700,900, and1100may be implemented as hardware logic/electrical circuitry.

For instance, in an embodiment, one or more, in any combination, of computing device102, first browser104, second browser106, second browser (first instance)106A, multi-browser tab manager108, first render engine120, tab114, host browser interface112, multi-tab manager128, tab126, web browser control124, second render engine122, computing device402, first browser404, second browser (first instance)406A, multi-browser tab manager408, first render engine420, tab414, host browser interface412, multi-tab manager428, tab426, web browser control424, second render engine422, computing device602, first browser604, second browser (first instance)606A, multi-browser tab manager608, first render engine620, tab614, host browser interface612, multi-tab manager628, tab626, web browser control624, second render engine622, computing device802, first browser804, second browser (first instance)806A, multi-browser tab manager808, first render engine820, tab814, host browser interface812, multi-tab manager828, tab826, web browser control824, second render engine822, watchdog process832, operating system834, computing device1002, first browser1004, second browser (first instance)1006A, multi-browser tab manager1008, first render engine1020, tab1014, host browser interface1012, multi-tab manager1028, tab1026, web browser control1024, second render engine1022, accelerator mapping1030, computing device1202, first browser1204, second browser (first instance)1206A, multi-browser tab manager1208, first render engine1220, tab1214, host browser interface1212, multi-tab manager1228, tab1226, web browser control1224, second render engine1222, permission analyzer1232, and permissions cache1230(and/or any of the components described therein), and/or flowchart200,300,500,700,900, and1100may be implemented together in a SoC. The SoC may include an integrated circuit chip that includes one or more of a processor (e.g., a central processing unit (CPU), microcontroller, microprocessor, digital signal processor (DSP), etc.), memory, one or more communication interfaces, and/or further circuits, and may optionally execute received program code and/or include embedded firmware to perform functions.

FIG.13depicts an exemplary implementation of a computing device1300in which embodiments may be implemented. For example, computing devices102,402,602,802,1002, and/or1202may be implemented in one or more computing devices similar to computing device1300in stationary or mobile computer embodiments, including one or more features of computing device1300and/or alternative features. The description of computing device1300provided herein is provided for purposes of illustration, and is not intended to be limiting. Embodiments may be implemented in further types of computer systems, as would be known to persons skilled in the relevant art(s).

As shown inFIG.13, computing device1300includes one or more processors, referred to as processor circuit1302, a system memory1304, and a bus1306that couples various system components including system memory1304to processor circuit1302. Processor circuit1302is an electrical and/or optical circuit implemented in one or more physical hardware electrical circuit device elements and/or integrated circuit devices (semiconductor material chips or dies) as a central processing unit (CPU), a microcontroller, a microprocessor, and/or other physical hardware processor circuit. Processor circuit1302may execute program code stored in a computer readable medium, such as program code of operating system1330, application programs1332, other programs1334, etc. Bus1306represents one or more of any of several types of bus structures, including a memory bus or memory controller, a peripheral bus, an accelerated graphics port, and a processor or local bus using any of a variety of bus architectures. System memory1304includes read only memory (ROM)1308and random-access memory (RAM)1310. A basic input/output system1312(BIOS) is stored in ROM1308.

Computing device1300also has one or more of the following drives: a hard disk drive1314for reading from and writing to a hard disk, a magnetic disk drive1316for reading from or writing to a removable magnetic disk1318, and an optical disk drive1320for reading from or writing to a removable optical disk1322such as a CD ROM, DVD ROM, or other optical media. Hard disk drive1314, magnetic disk drive1316, and optical disk drive1320are connected to bus1306by a hard disk drive interface1324, a magnetic disk drive interface1326, and an optical drive interface1328, respectively. The drives and their associated computer-readable media provide nonvolatile storage of computer-readable instructions, data structures, program modules and other data for the computer. Although a hard disk, a removable magnetic disk and a removable optical disk are described, other types of hardware-based computer-readable storage media can be used to store data, such as flash memory cards, digital video disks, RAMs, ROMs, and other hardware storage media.

A number of program modules may be stored on the hard disk, magnetic disk, optical disk, ROM, or RAM. These programs include operating system1330, one or more application programs1332, other programs1334, and program data1336. Application programs1332or other programs1334may include, for example, computer program logic (e.g., computer program code or instructions) for implementing any of the features of computing device102, first browser104, second browser106, second browser (first instance)106A, multi-browser tab manager108, first render engine120, tab114, host browser interface112, multi-tab manager128, tab126, web browser control124, second render engine122, computing device402, first browser404, second browser (first instance)406A, multi-browser tab manager408, first render engine420, tab414, host browser interface412, multi-tab manager428, tab426, web browser control424, second render engine422, computing device602, first browser604, second browser (first instance)606A, multi-browser tab manager608, first render engine620, tab614, host browser interface612, multi-tab manager628, tab626, web browser control624, second render engine622, computing device802, first browser804, second browser (first instance)806A, multi-browser tab manager808, first render engine820, tab814, host browser interface812, multi-tab manager828, tab826, web browser control824, second render engine822, watchdog process832, operating system834, computing device1002, first browser1004, second browser (first instance)1006A, multi-browser tab manager1008, first render engine1020, tab1014, host browser interface1012, multi-tab manager1028, tab1026, web browser control1024, second render engine1022, accelerator mapping1030, computing device1202, first browser1204, second browser (first instance)1206A, multi-browser tab manager1208, first render engine1220, tab1214, host browser interface1212, multi-tab manager1228, tab1226, web browser control1224, second render engine1222, permission analyzer1232, and permissions cache1230(and/or any of the components described therein), and/or flowchart200,300,500,700,900, and1100, and/or further embodiments described herein.

A user may enter commands and information into computing device1300through input devices such as keyboard1338and pointing device1340. Other input devices (not shown) may include a microphone, joystick, game pad, satellite dish, scanner, a touch screen and/or touch pad, a voice recognition system to receive voice input, a gesture recognition system to receive gesture input, or the like. These and other input devices are often connected to processor circuit1302through a serial port interface1342that is coupled to bus1306, but may be connected by other interfaces, such as a parallel port, game port, or a universal serial bus (USB).

A display screen1344is also connected to bus1306via an interface, such as a video adapter1346. Display screen1344may be external to, or incorporated in computing device1300. Display screen1344may display information, as well as being a user interface for receiving user commands and/or other information (e.g., by touch, finger gestures, virtual keyboard, etc.). In addition to display screen1344, computing device1300may include other peripheral output devices (not shown) such as speakers and printers.

Computing device1300is connected to a network1348(e.g., the Internet) through an adaptor or network interface1350, a modem1352, or other means for establishing communications over the network. Modem1352, which may be internal or external, may be connected to bus1306via serial port interface1342, as shown inFIG.13, or may be connected to bus1306using another interface type, including a parallel interface.

As used herein, the terms “computer program medium,” “computer-readable medium,” and “computer-readable storage medium” are used to refer to physical hardware media such as the hard disk associated with hard disk drive1314, removable magnetic disk1318, removable optical disk1322, other physical hardware media such as RAMs, ROMs, flash memory cards, digital video disks, zip disks, MEMS, nanotechnology-based storage devices, and further types of physical/tangible hardware storage media. Such computer-readable storage media are distinguished from and non-overlapping with communication media (do not include communication media). Communication media embodies computer-readable instructions, data structures, program modules or other data in a modulated data signal such as a carrier wave. The term “modulated data signal” means a signal that has one or more of its characteristics set or changed in such a manner as to encode information in the signal. By way of example, and not limitation, communication media includes wireless media such as acoustic, RF, infrared and other wireless media, as well as wired media. Embodiments are also directed to such communication media that are separate and non-overlapping with embodiments directed to computer-readable storage media.

As noted above, computer programs and modules (including application programs1332and other programs1334) may be stored on the hard disk, magnetic disk, optical disk, ROM, RAM, or other hardware storage medium. Such computer programs may also be received via network interface1350, serial port interface1342, or any other interface type. Such computer programs, when executed or loaded by an application, enable computing device1300to implement features of embodiments discussed herein. Accordingly, such computer programs represent controllers of the computing device1300.

Embodiments are also directed to computer program products comprising computer code or instructions stored on any computer-readable medium. Such computer program products include hard disk drives, optical disk drives, memory device packages, portable memory sticks, memory cards, and other types of physical storage hardware.

III. Additional Example Embodiments

A method in a computing device is described herein. The method comprises: executing a first browser in the computing device, the first browser having an open browser window; receiving a request at the first browser to navigate to a first page; determining that the first page is incompatible with the first browser and compatible with a second browser; sending, by the first browser, an invocation request to invoke an instance of the second browser; responsive to receiving the invocation request, loading, by the instance of the second browser, a host browser interface for the instance of the second browser, the host browser interface being coupled to a browser frame layer of the instance of the second browser; and executing, under control by the first browser, the instance of the second browser without a browser window opening for the instance of the second browser.

In one embodiment of the foregoing method, the method further comprises: providing an address of the first page to the instance of the second browser; and rendering, by the instance of the second browser, the first page, the first page being hosted within a tab in the browser window of the first browser.

In one embodiment of the foregoing method, the method further comprises: providing at least one of an address of a second page to which the instance of the second browser has traversed or a security indicator associated with the second page to the first browser; rendering, by the instance of the second browser, the second page, the second page being hosted within the tab in the browser window of the first browser; and displaying the at least one of the address via an address bar associated with the first browser or a graphical user interface element that is representative of the security indicator and that is associated with the first browser.

In one embodiment of the foregoing method, the method further comprises: receiving, from the host browser interface, a status indicator indicative of a status of the first page being rendered by the instance of the second browser; and displaying, by the first browser, a graphical user interface element that is representative of the status indicator and that is associated with the first browser.

In one embodiment of the foregoing method, the method further comprises: providing, by the first browser, a process identifier associated with the first browser to the host browser interface; determining that the first browser is inactive based on the process identifier; and in response to determining that the first browser is no longer active, causing the instance of the second browser to be terminated.

In one embodiment of the foregoing method, the method further comprises: receiving, from the host browser interface, first accelerator input provided to the instance of the second browser; determining whether the first accelerator input matches a second accelerator input stored in an accelerator mapping associated with the first browser; in response to determining that the first accelerator input matches the second accelerator input, performing, by the first browser, an action corresponding to the first accelerator input; and in response to determining that the first accelerator input does not match the second accelerator input, bypassing the processing of the first accelerator input.

In one embodiment of the foregoing method, the method further comprises: providing, by the first browser, permission settings associated with the first browser, to the host browser interface; storing, by the second browser, the permission settings; receiving, by the second browser, a request from the first page for a permission to perform a particular action; determining whether a permission setting of the permission settings authorizes the first page to perform the particular action; in response to determining that the permission setting authorizes the first page to perform the particular action, providing, by the second browser, a response to the first page that indicates that the first page is authorized to perform the particular action; and in response to determining that the permission setting does not authorize the first page to perform the particular action: providing, by the second browser, a request to the first browser to render a user interface element associated with the first browser that prompts a user for input, the input specifying whether the first page is authorized to perform the particular action; receiving, by the first browser, a response indicative of the user's input; providing, by the first browser, the response to the second browser; and providing, by second browser, the response to the first page.

In one embodiment of the foregoing method, functionality of the instance of the second browser is hosted within the first browser, the functionality including at least one of: virtual tab switching; browser helper objects; and one or more browser extensions.

A system is also described herein. The system includes at least one processor circuit; and at least one memory that stores program code configured to be executed by the at least one processor circuit, the program code comprising: a first browser configured to: receive a request at a first browser to navigate to a first page, the first browser having an open browser window; determine that the first page is incompatible with the first browser and compatible with a second browser; and send an invocation request; to invoke an instance of the second browser; and a second browser configured to: invoke an instance thereof responsive to receiving the invocation request, the instance of the second browser being configured to: load a host browser interface for the instance of the second browser, the host browser interface being coupled to a browser frame layer of the instance of the second browser, the first browser being further configured to control execution of the instance of the second browser without a browser window opening for the instance of the second browser.

In one embodiment of the foregoing system, the first browser is further configured to provide an address of the first page to the instance of the second browser, and wherein the instance of the second browser is configured to render the first page, the first page being hosted within a tab in the browser window of the first browser.

In one embodiment of the foregoing system, the instance of the second browser is further configured to provide at least one of an address of a second page to which the instance of the second browser has traversed or a security indicator associated with the second page to the first browser, and render the second page, the second page being hosted within the tab in the browser window of the first browser, and the first browser is configured to display the at least one of the address via an address bar associated with the first browser or a graphical user interface element that is representative of the security indicator and that is associated with the first browser.

In one embodiment of the foregoing system, the first browser is further configured to: receive, from the host browser interface, a status indicator indicative of a status of the first page being rendered by the instance of the second browser; and display a graphical user interface element that is representative of the status indicator and that is associated with the first browser.

In one embodiment of the foregoing system, the first browser is further configured to provide a process identifier associated with the first browser to the host browser interface, and the instance of the second browser is further configured to: determine that the first browser is inactive based on the process identifier; and in response to determining that the first browser is no longer active, cause the instance of the second browser to be terminated.

In one embodiment of the foregoing system, the host browser interface is a dynamic linked library.

In one embodiment of the foregoing system, the invocation request comprises one or more parameters that specify at least one of a name of the host browser interface or a location from which to load the host browser interface.

In one embodiment of the foregoing system, the invocation request comprises a parameter that instructs the instance of the second browser to: suppress an opening of the browser window of the instance of the second browser; provide at least one of rendering information or contextual information associated with the instance of the second browser to the first browser; and cause the first page to be opened in a tab of the first browser.

A computer-readable storage medium having program instructions recorded thereon that, when executed by at least one processor of a computing device, perform a method. The method includes: executing a first browser in the computing device, the first browser having an open browser window; receiving a request at the first browser to navigate to a first page; determining that the first page is incompatible with the first browser and compatible with a second browser; sending, by the first browser, an invocation request to invoke an instance of the second browser; responsive to receiving the invocation request, loading, by the instance of the second browser, a host browser interface for the instance of the second browser, the host browser interface being coupled to a browser frame layer of the instance of the second browser; and executing, under control by the first browser, the instance of the second browser without a browser window opening for the instance of the second browser.

In one embodiment of the foregoing computer-readable storage medium, the method further comprises: providing an address of the first page to the instance of the second browser; and rendering, by the instance of the second browser, the first page, the first page being hosted within a tab in the browser window of the first browser.

In one embodiment of the foregoing computer-readable storage medium, the method further comprises: providing at least one of an address of a second page to which the instance of the second browser has traversed or a security indicator associated with the second page to the first browser; rendering, by the instance of the second browser, the second page, the second page being hosted within the tab in the browser window of the first browser; and displaying the at least one of the address via an address bar associated with the first browser or a graphical user interface element that is representative of the security indicator and that is associated with the first browser.

In one embodiment of the foregoing computer-readable storage medium, the method further comprises: receiving, from the host browser interface, a status indicator indicative of a status of the first page being rendered by the instance of the second browser; and displaying, by the first browser, a graphical user interface element that is representative of the status indicator and that is associated with the first browser.

In one embodiment of the foregoing computer-readable storage medium, the method further comprises: providing, by the first browser, a process identifier associated with the first browser to the host browser interface; determining that the first browser is inactive based on the process identifier; and in response to determining that the first browser is no longer active, causing the instance of the second browser to be terminated.

In one embodiment of the foregoing computer-readable storage medium, the host browser interface is a dynamic linked library.

IV. Conclusion

While various embodiments of the present invention have been described above, it should be understood that they have been presented by way of example only, and not limitation. It will be understood by those skilled in the relevant art(s) that various changes in form and details may be made therein without departing from the spirit and scope of the invention as defined in the appended claims. Accordingly, the breadth and scope of the present invention should not be limited by any of the above-described exemplary embodiments, but should be defined only in accordance with the following claims and their equivalents.