Patent Description:
Computer systems routinely communicate information with other computer systems over networks, including wide-area networks such as the Internet. One form of communication is the sending of web pages (documents commonly written in Hypertext Markup Language (HTML) and accessible through the World Wide Web) from a server computer system to a client computer system that presents them to a user, who may view and interact with them. In particular, a user can request access to a set of web pages using a web browser and then view and interact with them using the web browser. Such interaction may involve the user providing input to the web browser for the web pages, copying content from the web pages, navigating the web pages using web links, etc..

<CIT> describes a system and method for handling web applications that are maintained by a server and distributed upon request to client devices where they are executed in a browser or in the specific execution environment of the client device. Different versions of a webpage, such as a browser-based webpage and a non-browser-based webpage, are maintained in a server. When a client device sends a webpage request to the server, a marking parameter is added to the request, if the application requesting the webpage is a non-browser application. Depending on whether the marking parameter is present or not, a browser version or a non-browser version is returned for execution.

<CIT>describes systems and methods for accelerating loading, parsing, and rendering of a web page hosted by a native mobile application. To this end, a manifest file including resources for rendering the webpage hosted by the native mobile application is stored in a local web cache. A request is sent by the native mobile application to a website associated with the native mobile application for the webpage. While initial content of the webpage is loading, the resources stored in the local web cache are loaded into a browser document object model and the webpage is rendered within the native mobile application.

The publication "<NPL>et al. relates to approaches to developing applications for mobile platforms and enabling support of natively mobile web applications and in this context addresses hybrid apps. The authors provide an overview of the platforms Firefox OS and Tizen and compare their security features with those of the Android operating system.

Embodiments labelled as inventive embodiments in the following, which are not covered by the scope of protection defined by the independent claims, are to be understood as examples helpful for understanding the invention, but not as embodiments of the invention.

This disclosure includes references to "one embodiment" or "an embodiment. " The appearances of the phrases "in one embodiment" or "in an embodiment" do not necessarily refer to the same embodiment. Particular features, structures, or characteristics may be combined in any suitable manner consistent with this disclosure.

Within this disclosure, different entities (which may variously be referred to as "units," "circuits," other components, etc.) may be described or claimed as "configured" to perform one or more tasks or operations. This formulation-[entity] configured to [perform one or more tasks]-is used herein to refer to structure (i.e., something physical, such as an electronic circuit). More specifically, this formulation is used to indicate that this structure is arranged to perform the one or more tasks during operation. A structure can be said to be "configured to" perform some task even if the structure is not currently being operated. A "network interface configured to communicate over a network" is intended to cover, for example, an integrated circuit that has circuitry that performs this function during operation, even if the integrated circuit in question is not currently being used (e.g., a power supply is not connected to it). Thus, an entity described or recited as "configured to" perform some task refers to something physical, such as a device, circuit, memory storing program instructions executable to implement the task, etc. This phrase is not used herein to refer to something intangible. Thus, the "configured to" construct is not used herein to refer to a software entity such as an application programming interface (API).

The term "configured to" is not intended to mean "configurable to. " An unprogrammed FPGA, for example, would not be considered to be "configured to" perform some specific function, although it may be "configurable to" perform that function and may be "configured to" perform the function after programming.

As used herein, the terms "first," "second," etc. are used as labels for nouns that they precede, and do not imply any type of ordering (e.g., spatial, temporal, logical, etc.) unless specifically stated. For example, in a processor having eight processing cores, the terms "first" and "second" processing cores can be used to refer to any two of the eight processing cores. In other words, the first and second processing cores are not limited to processing cores <NUM> and <NUM>, for example.

As used herein, the term "based on" is used to describe one or more factors that affect a determination. This term does not foreclose the possibility that additional factors may affect a determination. That is, a determination may be solely based on specified factors or based on the specified factors as well as other, unspecified factors. Consider the phrase "determine A based on B. " This phrase specifies that B is a factor is used to determine A or that affects the determination of A. This phrase does not foreclose that the determination of A may also be based on some other factor, such as C. This phrase is also intended to cover an embodiment in which A is determined based solely on B. As used herein, the phrase "based on" is thus synonymous with the phrase "based at least in part on.

The type of experience that a user has when viewing and interacting with web pages is often dependent on the implementation of the web browser that is used. For example, if a web browser implements a location-based feature, then the user can provide their location for an improved experience in which a web page presents location-relevant information to the user. There are, however, many features, such as geofencing, that today's web browsers do not implement. (Geofencing being the ability to perform an action based upon a user being located within a predefined geographic area. ) As a result, web browsers, in some cases, are not able to provide a feature-rich experience to users. Moreover, the features that web browsers implement are often not as versatile and capable as the counterparts provided by a client platform (e.g., iOS®) on which the web browsers may execute. It may be desirable to implement an environment that can execute web applications (e.g., web pages) and also provide them with access to more features, including those provided by a client platform.

The present invention provides a method according to claim <NUM>, a system according to claim <NUM>, a computer-readable medium according to claim <NUM> and a web application according to claim <NUM>. Specific embodiments thereof are set out subsequently and in the dependent claims. A method according to the present invention may especially be carried out by a server computer system. A client application may especially implement a set of modules that enable the web application to invoke the set of features supported by the respective client platform The client device on which the browser executes may especially be the first client device on which the first client application executes.

The method of the invention may also comprise.

The method of the invention may also comprise
receiving, by the server computer system, an update to the web application, wherein the web application is updated such that the web application is capable of invoking an additional feature supported by the client platform but not by the particular web browser.

The method of the invention may comprise.

The method of the invention may provide that the web application is capable of invoking a plurality of features, including features supported by a particular web browser and a client platform, and wherein the web application is capable of identifying, when executing within the particular web browser or within the client application, particular ones of the plurality of features that are available for invoking by the web application.

The method of the invention may provide that the client platform supports a plurality of versions for a particular feature, and wherein the web application is capable of:.

The method of the invention may further comprise.

The second client application may execute on a third client device that implements the second client platform.

The method may further comprise
prior to receiving the request for the web application from a client application, sending the client application to the second client device for execution on the second client device.

The method of the invention may especially comprise.

This method may further comprise
in response receiving at least one request from the web application to register the particular features, the particular instance of the client application registering the particular features such that the web application is permitted to cause the particular instance to invoke the particular features on behalf of the web application.

The client application may especially support at least two different versions of a particular one of the set of features.

In an embodiment, the web application is a web page hosted by a server computer system.

The present disclosure describes techniques for implementing a client application that is capable of executing web applications and providing them with access to native features that are provided by a client platform. An example of a web application may be a web page and an example of a client application may be an application specifically developed for iOS®. In various embodiments that are described below, a client application that is native to a client platform includes an execution environment in which web applications can be executed and a feature API through which the web applications can invoke features of the client platform. In some embodiments, the feature API includes a set of modules via which a web application may invoke a corresponding set of features of the client platform on which the client application executes.

A server computer system, in various embodiments, hosts a web application that is distributed to a web browser and a client application upon request. Accordingly, the server computer system may send the web application to a particular instance of the client application that is executing on a client device that implements a client platform corresponding to the client application. The particular instance of the client application is operable to execute the received web application within its execution environment. In various cases, when that web applications is executed within the particular instance, the web application may invoke at least one feature, such as geofencing, that is not supported by the web browser.

These techniques are believed advantageous over prior approaches as they allow for a developer to write one code base (e.g., a web application) that can be served to a browser or a native application that is native to a particular platform. That is, developers may be provided with the ability of developing only one application (which can be executed across different platforms) instead of having to develop a platform-specific application for each platform. For example, instead of developing an application for a web browser, an application for Android™, and an application for iOS®, a developer may develop one application that can be executed by the web browser, Android™, and iOS®. Accordingly, a server computer system serves the same web application to a web browser and a native application upon request. At runtime, the web application may check which features are available in its runtime container (i.e., the web browser or the native application) and call them where appropriate.

Moreover, these techniques allow web applications to invoke the native features of a client platform, various ones of which may be more versatile and capable than the counterparts provided by web browsers. Accordingly, users may be provided with an improved experience when viewing and interacting with web applications. That is, the web application (without changes to its code) can use native features (that would be missing in the web browser) when running in a native application. A system for implementing these techniques will now be discussed below, starting with <FIG>.

Turning now to <FIG>, a block diagram of a system <NUM> is shown. System <NUM> includes components that are implemented via hardware or a combination of hardware and software routines. In the illustrated embodiment, system <NUM> includes a server system <NUM> and a client device <NUM>. As further illustrated, server system <NUM> includes a web application <NUM> and client device <NUM> includes client platform <NUM> having platform features <NUM>, a web browser <NUM> (with browser features <NUM>), and a client application <NUM>. In some embodiments, system <NUM> may be implemented differently than shown. As an example, client platform <NUM> may not include web browser <NUM>-web browser <NUM> may be executed on a second, different client device <NUM> that implements the same or a different client platform <NUM>.

Server system <NUM>, in various embodiments, is a system that hosts web application <NUM> for distribution to other systems including client device <NUM>. Server system <NUM> may, for example, implement a database management system capable of interacting with tenants, applications (such as web application <NUM>), and databases in order to store, analyze, and serve data. Accordingly, in some embodiments, server system <NUM> may be a multi-tenant system that receives and manages data from tenants-such data may include web applications <NUM>. In various cases, tenants of server system <NUM> may develop and upload web applications <NUM> to server system <NUM> for distribution to web browsers <NUM> and client applications <NUM>. Accordingly, in various embodiments, server system <NUM> hosts multiple web applications <NUM> that are received from one or more tenants and sends such web applications <NUM> to web browsers <NUM> and client applications <NUM> upon request. In some cases, server system <NUM> may receive an update to a particular web application <NUM>; such an update may permit that web application <NUM> to invoke additional platform features <NUM> and/or browser features <NUM>.

Web application <NUM>, in various embodiments, includes a set of software routines that provide a web-based experience when executed. Web application <NUM> may, for example, be a set of dynamic web pages that a user can view and interact with when rendered by web browser <NUM> or client application <NUM>. In various embodiments, web application <NUM> includes software routines that are executable to invoke browser features <NUM> and/or platform features <NUM>. When executed within web browser <NUM>, web application <NUM> may invoke browser features <NUM>, and when executed within client application <NUM>, web application <NUM> may invoke client platform features <NUM>. In various instances, different web applications <NUM> may be capable of invoking different features <NUM> and/or <NUM> from each other-they may invoke different feature sets that have overlap or no overlap in features. For example, one web application <NUM> may be able to invoke a geofencing feature while another web application <NUM> cannot (as it may not be designed to).

Client device <NUM>, in various embodiments, is a computer system capable of interacting with server system <NUM> in a client-server relationship. Client device <NUM> may be, for example, a desktop computer, a laptop, a smartphone, a smartwatch, etc. In various embodiment, client device <NUM> executes a client platform <NUM> upon which software routines, such as web browser <NUM> and client application <NUM>, may be executed. Client platform <NUM>, in various embodiments, is a set of software routines that provides an environment that is capable of initiating execution of other software routines and subsequent management of that execution. Client platform <NUM> may be, for example, an operating system, such as iOS® or Android™. In various cases, there may be multiple client devices <NUM> that interact with server system <NUM>, each of which may be executing a different client platform <NUM>.

Client platform <NUM> may provide a framework under which applications, such as client application <NUM>, are developed. In various instances, a client application <NUM> developed for one client platform <NUM> may implement the same or similar functionality as a client application <NUM> developed for another client platform <NUM>; however, both client applications <NUM> may include different software routines. For example, there may be a client application <NUM> that is specific to the Android™ operating system and a client application <NUM> specific to the iOS® operating system. In some embodiments, client platform <NUM> may provide an application store or exchange that allows for various client applications such as client application <NUM> to be downloaded and installed on client platform <NUM>. In some cases, server system <NUM> may provide the appropriate client application <NUM> for a client platform <NUM> in response to a request from client device <NUM>.

As illustrated, client platform <NUM> includes platform features <NUM> that may be invoked by web application <NUM> via client application <NUM>. Examples of platform features <NUM> include, but are not limited to, geofencing, artificial intelligence integration (e.g., the ability to issue a command to Siri®), push notifications, microphone access, camera access, Bluetooth® access, and photo access. In some cases, different client platforms <NUM> may include different platform features <NUM>. As an example, one client platform <NUM> may implement push notifications while another client platform <NUM> does not implement that platform feature. As such, a client platform <NUM> may include platforms features <NUM> that are not included by another client platform or by web browser <NUM>. In some instances, different client platforms <NUM> may include the same high-level feature but implement that feature differently. For example, two client platforms <NUM> may have different implementations of artificial intelligence agents (e.g., Google Assistant™ versus Siri®). These two client platforms <NUM> support the same feature, although it is implemented differently.

Web browser <NUM>, as used herein, is a program executable to access web pages and other content in a standardized format, such as HTML or XML. These web pages are commonly located on a network, such as the World Wide Web. Examples of web browsers <NUM> include, but are not limited to, Chrome™, Safari®, Firefox®, and Edge®. As shown, web browser <NUM> includes browser features <NUM> that may be invoked by web application <NUM>. Examples of web browser features <NUM> include, but are not limited to, offline work mode (e.g., a service worker periodically caches data for web application <NUM> so that it can be loaded even when a user has temporarily lost their Internet connection), push notifications, and Hypertext Transfer Protocol Secure (HTTPS) support. In various embodiments, web browser <NUM> implements an API that allows for web application <NUM> to invoke browser features <NUM> when it is executed within web browser <NUM>.

In various cases, platform features <NUM> and browser features <NUM> may include different sets of features. As an example, platform features <NUM> may include a geofencing feature that is not included in browser features <NUM>. As a result, when web application <NUM> is executed within client application <NUM>, web application <NUM> may invoke that geofencing feature. But when web application <NUM> is executed within web browser <NUM>, it cannot use the geofencing feature. As such, client application <NUM> may allow for a web application <NUM> to provide an improved user experience when executed by client application <NUM> as opposed to web browser <NUM>. In some cases, platform features <NUM> and browser features <NUM> may include the same high-level feature, but different implementations-the particular platform feature <NUM> may be more versatile than the particular browser feature <NUM>. As an example, platform features <NUM> and browser features <NUM> may include a push notification feature. The push notification feature <NUM> of web browser <NUM> may be able to provide notifications for web application <NUM> only while web browser <NUM> is executing on client platform <NUM>. But the push notification feature <NUM> of client platform <NUM> may be able to provide notifications for web application <NUM> even when client application <NUM> is not executing on client platform <NUM>.

Client application <NUM>, as used herein, is a set of software routines executable to implement an environment in which web application <NUM> can be executed. Client application <NUM>, in various embodiments, implements an API that allows for web application <NUM> to invoke platform features <NUM> of client platform <NUM>. Client application <NUM> may be a native application that is native to a particular client platform <NUM>. The term "native application" is used herein according to its ordinary and accustomed meaning in the art, and includes an application that is written for a framework supported by a specific client platform. As an example, client application <NUM> may be written and optimized for the iOS® operating system, and thus be "native" to that platform. Client application <NUM> may request web application <NUM> from server system <NUM> in response to different conditions being met, such as a user opening client application <NUM> or a user selecting a certain tab within client application <NUM>. Once web application <NUM> is received, client application <NUM> may execute web application <NUM> within the environment implemented by client application <NUM>. As part of that execution, web application <NUM> may invoke platform features <NUM> using the API that is provided by client application <NUM>.

Implementing system <NUM> in this manner is believed advantageous over prior approaches as it allows for web applications to have access to features provided by a client platform. Such features may include features that are not supported by web browsers along with features that are more versatile than their web browser counterparts. Consequently, system <NUM> may allow for web applications to provide an improved user experience in which users have access to more and better features.

Turning now to <FIG>, a block diagram of an example server system <NUM> is shown. In the illustrated embodiment, server system <NUM> includes web application <NUM> and feature availability information <NUM>. As shown, web application <NUM> includes implemented features <NUM> and a check engine <NUM>. In some embodiments, server system <NUM> may be implemented differently than shown. As an example, server system <NUM> may include multiple, different web applications <NUM>, which may be received from systems associated with one or more different users of server system <NUM>.

Feature availability information <NUM>, in various embodiments, is information indicating platform features <NUM> that are supported by client application <NUM>. In some instances, feature availably information <NUM> may be an API documentation page that a developer consults when writing the code for their web application <NUM>. Consider an example where client platform <NUM> provides a platform feature <NUM> for geofencing and client application <NUM> supports that platform feature. Accordingly, feature availability information <NUM> may indicate that the geofencing platform feature <NUM> is available for invoking by a web application <NUM> via client application <NUM>. With that knowledge, a developer may code their web application <NUM> to be able to invoke the geofencing platform feature <NUM> via client application <NUM>. In various embodiments, there are multiple client applications <NUM>, each of which may be developed for a certain client platform <NUM>. Feature availability information <NUM> may indicate, for each client application <NUM>, the platform features <NUM> that are available for invoking by a web application <NUM> via that client application <NUM>. As an example, feature availability information <NUM> might indicate that a geofencing platform feature <NUM> is available on one particular client platform <NUM> (via the corresponding client application <NUM>) and a push notification platform feature <NUM> is available on another particular client platform <NUM> (via the corresponding client application <NUM>).

In various embodiments, server system <NUM> causes feature availability information <NUM> to be presented to a user (e.g., by sending information <NUM> to a client device for presenting to that user) in response to a request for information <NUM>. As an example, when developing a web application <NUM>, a developer may wish to know which platform features <NUM> are available via a particular client application <NUM>. As such, that developer may request (using a client device) feature availability information <NUM> from server system <NUM>. In some cases, feature availability information <NUM> may be stored at an external system that provides it upon request.

Implemented features <NUM>, in various embodiments, are features that a web application <NUM> is capable of invoking when it is executed. In some cases, implemented features <NUM> may include both features from browser features <NUM> of web browser <NUM> and platform features <NUM> of client platform <NUM>. Accordingly, when executed within web browser <NUM>, web application <NUM> may invoke browser features <NUM> identified by implemented features <NUM>. When executed within client application <NUM>, web application <NUM> may invoke platform features <NUM> identified by implemented features <NUM>. Thus, web application <NUM> may invoke the appropriate features based on the environment in which it is executed. In some embodiments, implemented features <NUM> may include features corresponding to multiple web browsers <NUM> and/or client platforms <NUM>.

Check engine <NUM>, in various embodiments, checks for implemented features <NUM> that are available for invoking by web application <NUM> when executed. In some cases, such as when web application <NUM> is executed in client application <NUM>, check engine <NUM> may register those features (via an API) that are available for invoking. After registering features, web application <NUM> may then invoke those features (e.g., by making API calls to web browser <NUM> or client application <NUM>). In some embodiments, check engine <NUM> performs a progressive check where it checks for available platform features <NUM> before checking for browser features <NUM> (or vice versa in some cases).

As shown, server system <NUM> receives a web application request <NUM> from client device <NUM> for a web application <NUM>. In various cases, such as when server system <NUM> hosts different web applications <NUM>, web application request <NUM> may identify a specific web application <NUM> to be returned. As an example, web application request <NUM> might identify a uniform resource locator (URL) for a particular web application <NUM>. In response to receiving a web application request <NUM>, server system <NUM> may return the appropriate web application <NUM> to the requestor (e.g., web browser <NUM> or client application <NUM> of client device <NUM>) for execution. When web application <NUM> is executed, check engine <NUM> may check for any available features and register them to allow for subsequent invocation of those features.

Turning now to <FIG>, a block diagram of an example web browser <NUM> is shown. In the illustrated embodiments, web browser <NUM> includes browser features <NUM> and an execution environment <NUM>. As depicted, web application <NUM> can execute within execution environment <NUM>. In some embodiments, web browser <NUM> may be implemented differently than shown. For example, web browser <NUM> may include multiple execution environments <NUM> that are capable of executing multiple web applications <NUM> concurrently.

As explained earlier, web browser <NUM> may receive web application <NUM> in response to issuing a web application request <NUM> to server system <NUM>. Web browser <NUM> may issue web application request <NUM> in response to a user submitting a URL that directs web browser <NUM> to server system <NUM>. After receiving web application <NUM>, web browser <NUM> may execute web application <NUM> within execution environment <NUM>.

Execution environment <NUM>, in various embodiments, is a software environment that is capable of executing web application <NUM>. When executing within execution environment <NUM>, web application <NUM> may invoke browser features <NUM> using an API provided by web browser <NUM>. In some cases, web browser <NUM> may include multiple execution environments <NUM>, each of which may execute a respective web application <NUM>. Each execution environment <NUM> may be associated with one of multiple tabs maintained by web browser <NUM>.

Turning now to <FIG>, a block diagram of an example client application <NUM> is shown. In the illustrated embodiments, client application <NUM> includes an execution environment <NUM> and a feature application programming interface (API) <NUM>. As depicted, client application <NUM> operates on client platform <NUM>, which includes platform features <NUM>. As further illustrated, feature API <NUM> includes plugins <NUM>, and web application <NUM> can execute within execution environment <NUM>. Client application <NUM> may be implemented differently than shown. As an example, client application <NUM> may include multiple execution environments <NUM> capable of executing multiple web applications <NUM> concurrently.

As noted earlier, client application <NUM> may receive web application <NUM> in response to issuing a web application request <NUM> to server system <NUM>. Client application <NUM> may issue web application request <NUM> in response to a user navigating through client application <NUM>-e.g., a user may select a tab of client application <NUM>, causing client application <NUM> to issue a web application request <NUM>. After receiving web application <NUM>, client application <NUM> may execute web application <NUM> within execution environment <NUM>.

Execution environment <NUM>, in various embodiments, is a software environment that is capable of executing web application <NUM>. In some embodiments, environment <NUM> includes a container object that allows for web content, such as web application <NUM>, to be executed within an application that is native to a client platform <NUM>. For example, a client application <NUM> that is developed for the Android™ operating system may include a webview object that allows for web application <NUM> to be rendered. When executing within execution environment <NUM>, web application <NUM> may use feature API <NUM> to invoke platform features <NUM>.

Feature API <NUM>, in various embodiments, is an API that permits web application <NUM> to invoke platform features <NUM> using plugins <NUM>. A plugin <NUM>, in various embodiments, is a set of software routines executable to interface with a corresponding platform feature <NUM>. In various instances, a plugin <NUM> may be a software wrapper that wraps around the corresponding platform feature <NUM>. A plugin <NUM> may hide the underlying complexity of a platform feature <NUM> and present a consistent calling mechanism for invoking that platform feature. This may allow for web application <NUM> to issue the same call on different client platforms <NUM> to invoke the same platform feature <NUM>, including the cases in which the underlying implementation for that platform feature <NUM> is different. That is, a plugin <NUM> may provide a level of abstraction for invoking a platform feature <NUM>.

When executed within client application <NUM>, web application <NUM> may register for the features included in its implemented features <NUM>. Web application <NUM> may then invoke ones of those platform features <NUM> by issuing feature API <NUM> calls. Such calls may cause plugins <NUM> to invoke corresponding platforms features <NUM>, which may return a result. The result may be passed back to web application <NUM>. In various cases, client platform <NUM> may implement different versions of the same particular platform feature <NUM>. Accordingly, feature API <NUM> may include support for one or more of those different versions of that platform feature <NUM>. When executing within execution environment <NUM>, web application <NUM> may identify and register for a particular version based on the version that web application <NUM> has been written to invoke. Web application <NUM> may then invoke that particular version.

Turning now to <FIG>, a flow diagram of a method <NUM> is shown. Method <NUM> is one embodiment of a method performed by a computer system such as server system <NUM> in order to provide a web application (e.g., web application <NUM>) that is capable of executing within a particular web browser (e.g., a particular web browser <NUM>) or within a client application (e.g., client application <NUM>) that is native to a client platform (e.g., client platform <NUM>). In various cases, the particular web browser and the client platform may support differing sets of features (e.g., browser features <NUM> versus platform features <NUM>). In some embodiments, method <NUM> may include additional steps than shown-e.g., the computer system may receive an update to the web application.

Method <NUM> begins in step <NUM> with the computer system hosting the web application for distributing to instances of the client application. The client application may implement a set of modules (e.g., plugins <NUM>) that enable the web application to invoke the set of features supported by the client platform. As a result, the web application, when executing within an instance of the client application, may be capable of invoking at least one feature not supported by the particular web browser. The computer system accesses, in various embodiments, feature information (e.g., feature availability information <NUM>) that identifies the set of modules implemented by the client application. Accordingly, in response to a second request for the feature information, the computer system may cause the feature information to be presented (e.g., via a graphical interface) to a user associated with the second request.

In step <NUM>, the computer system receives, from a particular instance of the client application executing on a client device (e.g., client device <NUM>) that implements the client platform, a request (e.g., web application request <NUM>) for the web application.

In step <NUM>, the computer system sends the web application to the particular instance of the client application to cause the web application to be executed within the particular instance. Execution of the web application within the particular instance may permit the web application to invoke the at least one feature not supported by the particular web browser. In some embodiments, the web application is capable of invoking a plurality of features, including features supported by the particular web browser and the client platform. The web application may be capable of identifying, when executing within the particular web browser or within the client application, particular ones of the plurality of features that are available for invoking by the web application. In some embodiments, the client platform supports a plurality of versions for a particular feature. As such, the web application may be capable of identifying a particular one of the plurality of versions based on the particular version matching a version invokable by the web application. The web application may be capable of invoking the particular version of the particular feature.

The particular web browser may execute on a second client device, which may be the client device that executes the particular instance. The computer system may receive, from the particular web browser, a second request (e.g., web application request <NUM>) for the web application. As such, the computer system may send the web application to the particular web browser to cause the web application to be executed within the particular web browser. The web application, when executing within the particular web browser, may not be capable of invoking the at least one feature.

The computer system may receive, from a second particular instance of a second client application executing on a second client device that implements a second client platform, a second request (e.g., web application request <NUM>) for the web application. The second client platform may support a set of different features than the particular web browser and the client platform. The computer system may send the web application to the second particular instance of the second client application to cause the web application to be executed within the second particular instance. Execution of the web application within the second particular instance may permit the web application to invoke at least one feature not supported by the particular web browser and the client platform. In some embodiments, the second client platform corresponds to a different operating system than the client platform.

In various embodiments, the computer system hosts a second web application for distributing to instances of the client application. The second web application may be capable of invoking a different set of features than the web application. In response to a second request from the particular instance for the second web application, the computer system may send the second web application to the particular instance to cause the second web application to be executed within the particular instance. Execution of the second web application within the particular instance may permit the second web application to invoke one or more features not supported by the web application.

Turning now to <FIG>, a flow diagram of a method <NUM> is shown. Method <NUM> is one embodiment of a method performed by a computer system such as server system <NUM> in order to provide a web application (e.g., web application <NUM>) that is capable of executing within a particular web browser (e.g., a particular web browser <NUM>) or within a client application (e.g., client application <NUM>) that is native to a client platform (e.g., client platform <NUM>). In various cases, the particular web browser and the client platform may support differing sets of features (e.g., browser features <NUM> versus platform features <NUM>). Method <NUM> may be performed by executing a set of program instructions stored on a non-transitory computer-readable medium. In some embodiments, method <NUM> may include additional steps than shown. For example, the computer system may receive an update to the web application.

Method <NUM> begins in step <NUM> with the computer system hosting the web application capable of executing within a plurality of environments that include a web browser and the client application that is native to the client platform.

In step <NUM>, the computer system receives, from a particular web browser executing on a first client computer system (e.g., a client device <NUM>), a request (e.g., web application request <NUM>) for the web application. The particular web browser may implement a first set of features (e.g., browser features <NUM>) that is different than a second set of features (e.g., platform features <NUM>) implemented by the client application. The first and second different sets of features may share one or more features-i.e., there may be at least one feature that is included in the two sets. In various embodiments, the computer system accesses feature information (e.g., feature availability information <NUM>) that identifies the second set of features implemented by the client application. The computer system may cause the feature information to be presented to a user in response to a third request for the feature information.

In step <NUM>, the computer system sends the web application to the particular web browser to cause the web application to be executed within the particular web browser. Execution of the web application within the particular web browser may permit the web application to invoke the first set of features.

In step <NUM>, the computer system receives, from a particular instance of the client application executing on a second client device that implements the client platform, a second request (e.g., web application request <NUM>) for the web application. In some instances, prior to receiving the second request for the web application, the computer system may send the client application to the second client device for execution on the second client device.

In step <NUM>, the computer system sends the web application to the particular instance of the client application to cause the web application to be executed within the particular instance. Execution of the web application within the particular instance may permit the web application to invoke the second set of features.

In various embodiments, the computer system hosts a second web application that is capable of executing within the particular web browser or within the client application. The computer system may receive a third request (e.g., web application request <NUM>) from the particular instance for the second web application. Accordingly, the computer system may send the second web application to the particular instance to cause the second web application to be executed within the particular instance. Execution of the second web application within the particular instance may permit the second web application to invoke at least one feature not invokable by the web application.

In various embodiments, the computer system receives, from a second particular instance of a second client application executing on a third client device that implements a second client platform, a third request for the web application. The second client application may implement a third set of features that is different from the first and second sets of features. The computer system may send the web application to the second particular instance of the second client application to cause the web application to be executed within the second particular instance. Execution of the web application within the second particular instance may permit the web application to invoke the third set of features.

Turning now to <FIG>, a flow diagram of a method <NUM> is shown. Method <NUM> is one embodiment of a method performed by a particular instance of a client application (e.g., client application <NUM>) in order to execute a web application (e.g., web application <NUM>) that is capable of being executed in a web browser (e.g., web browser <NUM>) or in the client application that is native to a client platform (e.g., client platform <NUM>). The web browser and the client platform may support differing sets of features (e.g., browser features <NUM> versus platform features <NUM>). In some embodiments, method <NUM> may include additional steps than shown-e.g., the particular instance may receive an update that allows it to support additional features of the client platform.

Method <NUM> begins in step <NUM> with the particular instance sends, to a server computer system (e.g., server system <NUM>), a request (e.g., web application request <NUM>) for the web application. The client application may implement a set of modules (e.g., plugins <NUM>) that enable the web application to invoke the set of features supported by the client platform. The web application may be a web page hosted by the server computer system.

In step <NUM>, in response to receiving the web application from the server computer system, the particular instance executes the web application. In various embodiments, such execution includes performing steps <NUM>-<NUM>.

In step <NUM>, the particular instance receives, from the web application, requests to invoke particular ones of the set of features supported by the client platform. In some cases, in response receiving at least one request from the web application to register the particular features, the particular instance may register the particular features such that the web application is permitted to cause the particular instance to invoke the particular features on behalf of the web application.

In step <NUM>, the particular instance invokes, on behalf of the web application, the particular features. In step <NUM>, the particular instance returns a result of the invoking to the web application.

In various embodiments, the particular instance sends a request for a second web application. In response to receiving the second web application, the particular instance may execute the second web application. Such execution may include the particular instance receiving, from the second web application, requests to invoke second particular ones of the set of features supported by the client platform. The second particular features may include at least one feature not included in the particular features. The execution may further include the particular instance invoking, on behalf of the second web application, the second particular features and returning, to the second web application, a second result of the invoking of the second particular features.

Turning now to <FIG>, a block diagram of an exemplary computer system <NUM>, which may implement server system <NUM> and/or client device <NUM>, is depicted. Computer system <NUM> includes a processor subsystem <NUM> that is coupled to a system memory <NUM> and I/O interfaces(s) <NUM> via an interconnect <NUM> (e.g., a system bus). I/O interface(s) <NUM> is coupled to one or more I/O devices <NUM>. Computer system <NUM> may be any of various types of devices, including, but not limited to, a server system, personal computer system, desktop computer, laptop or notebook computer, mainframe computer system, tablet computer, handheld computer, workstation, network computer, a consumer device such as a mobile phone, music player, or personal data assistant (PDA). Although a single computer system <NUM> is shown in <FIG> for convenience, system <NUM> may also be implemented as two or more computer systems operating together.

Processor subsystem <NUM> may include one or more processors or processing units. In various embodiments of computer system <NUM>, multiple instances of processor subsystem <NUM> may be coupled to interconnect <NUM>. In various embodiments, processor subsystem <NUM> (or each processor unit within <NUM>) may contain a cache or other form of on-board memory.

System memory <NUM> is usable store program instructions executable by processor subsystem <NUM> to cause system <NUM> perform various operations described herein. System memory <NUM> may be implemented using different physical memory media, such as hard disk storage, floppy disk storage, removable disk storage, flash memory, random access memory (RAM-SRAM, EDO RAM, SDRAM, DDR SDRAM, RAMBUS RAM, etc.), read only memory (PROM, EEPROM, etc.), and so on. Memory in computer system <NUM> is not limited to primary storage such as memory <NUM>. Rather, computer system <NUM> may also include other forms of storage such as cache memory in processor subsystem <NUM> and secondary storage on I/O Devices <NUM> (e.g., a hard drive, storage array, etc.). In some embodiments, these other forms of storage may also store program instructions executable by processor subsystem <NUM>. In some embodiments, program instructions that when executed implement web application <NUM>, client platform <NUM>, web browser <NUM>, and/or client application <NUM> may be included/stored within system memory <NUM>.

I/O interfaces <NUM> may be any of various types of interfaces configured to couple to and communicate with other devices, according to various embodiments. In one embodiment, I/O interface <NUM> is a bridge chip (e.g., Southbridge) from a front-side to one or more back-side buses. I/O interfaces <NUM> may be coupled to one or more I/O devices <NUM> via one or more corresponding buses or other interfaces. Examples of I/O devices <NUM> include storage devices (hard drive, optical drive, removable flash drive, storage array, SAN, or their associated controller), network interface devices (e.g., to a local or wide-area network), or other devices (e.g., graphics, user interface devices, etc.). In one embodiment, computer system <NUM> is coupled to a network via a network interface device <NUM> (e.g., configured to communicate over WiFi, Bluetooth, Ethernet, etc.).

Claim 1:
A method for providing a web application (<NUM>) that is capable of executing within a web browser (<NUM>) and within a client application (<NUM>) that is native to a client platform (<NUM>), comprising:
hosting a web application (<NUM>) for distribution to client applications (<NUM>) and web browsers (<NUM>), wherein a client application (<NUM>) implements a set of modules that enable the web application to invoke a set of features supported by a respective client platform (<NUM>),
wherein the web application (<NUM>) is capable of executing within a plurality of environments (<NUM>, <NUM>) that include a web browser, a first client application native to a first client platform and a second client application native to a second client platform,
wherein the second client platform supports a different set of features than the web browser and the first client platform and wherein the second client platform corresponds to a different operating system than the first client platform,
wherein execution of the web application (<NUM>) within the first client application permits the web application to invoke at least one feature not supported by the web browser
and wherein execution of the web application within the second client application permits the web application to invoke at least one feature not supported by the web browser and the first client platform;
receiving, from the first client application, executing on a first client device that implements the first client platform, a request for the web application (<NUM>),
receiving, from the web browser, executing on a client device that is the same as or different from the first client device, a request for the web application (<NUM>),
receiving, from the second client application, executing on a further client device that implements the second client platform, a request for the web application (<NUM>); and
sending the same web application (<NUM>) to the first client application, to the second client application and to the web browser to cause the web application to be executed within the first client application, the second client application and the web browser, respectively.