Selecting between client-side and server-side market detection

In accordance with one or more aspects of selecting between client-side and server-side market detection, a determination is made at a device as to which of a client-side detected market and a server-side detected market is to have priority for a service. An application of the device is configured in accordance with a client-side market configuration setting if the client-side detected market has priority, and is configured in accordance with a server-side market configuration setting if the server-side detected market has priority.

BACKGROUND

Computers have become increasingly commonplace throughout the world, and these computers have become increasingly interconnected via the Internet and other networks. Although this increased connectivity has advantages, it also comes with disadvantages. One problem that can arise is that computers can be used from many locations around the world to access other computers in other parts of the world. However, the configuration and settings for a computer in one part of the world may not be appropriate for another part of the world. Similarly, it may be desirable to have a server computer accessed by computers in one part of the world provide different services than when accessed by computers in another part of the world. These problems are burdensome on the part of the service suppliers, and can detract from the usability of computers throughout the world.

SUMMARY

In accordance with one or more aspects, a determination is made at a device as to which of a client-side detected market and a server-side detected market is to have priority for a service. An application of the device is configured in accordance with a client-side market configuration setting if the client-side detected market has priority, and is configured in accordance with a server-side market configuration setting if the server-side detected market has priority.

In accordance with one or more aspects, a computing device includes a processor and one or more computer readable media. The one or more computer readable media stores a market priority table and instructions. The market priority table maintains one or more records that identify, for each of multiple markets and each of the one or more services, configuration settings for an application. The instructions, when executed by the processor, cause the processor to determine the configuration settings for the application based on the market priority table and a determination of whether a client-side detected market has priority or a server-side detected market has priority.

DETAILED DESCRIPTION

Selecting between client-side and server-side market detection is discussed herein. During operation, an application running on a computing device is configured to present a user interface and/or make particular remote services available via the user interface. A market priority table is maintained that allows the application to automatically determine whether a server-side detected market or a client-side detected market has priority. Based on this determination, the application is automatically configured using server-side or client-side market configuration settings. This determination is made based on one or more of a market setting for the operating system of the computing device, a geographic location of the computing device, and where an online account of the user of the computing device was provisioned. This automatic configuration allows the computing device to present an appropriate user interface and/or make available appropriate remote services in a wide variety of scenarios.

FIG. 1illustrates an example system100implementing the selecting between client-side and server-side market detection in accordance with one or more embodiments. System100includes a computing device102, an online service account manager104, and one or more (m) additional remote services106(1. . .m). Device102, manager104, and services106can communicate with one another via a network108. Network108can be a variety of different networks, including the Internet, a local area network (LAN), a public telephone network, a cellular or other wireless phone network, an intranet, other public and/or proprietary networks, combinations thereof, and so forth.

Computing device102can be a variety of different devices capable of running an application. For example, computing device102can be a desktop computer, a mobile station, an entertainment appliance, a set-top box communicatively coupled to a display device, a cellular or other wireless phone, a game console, an automotive computer, and so forth. Thus, computing device102can range from a full resource device with substantial memory and processor resources (e.g., personal computers, game consoles) to a low-resource device with limited memory and/or processing resources (e.g., traditional set-top boxes, hand-held game consoles).

Online service account manager104, and each of services106, is typically implemented by one or more servers. Similar to the discussion of computing device102, each such server can be a variety of different devices, ranging from full resource devices with substantial memory and processor resources to a low-resource device with limited memory and/or processing resources. Each service106can be implemented on a different server, or alternatively multiple services106can be implemented on the same server. Additionally, each of services106can be implemented on the same or a different server as manager104.

Online service account manager104manages an online service account for a user of computing device102. Manager104allows the user to register for or otherwise create an online account, and further allows the user to login or sign in to his or her account. Manger104verifies that the user is authorized to access the particular account for which he or she attempts to login to. This authorization process can be performed in a variety of different manners, such as using a login identifier (id) and password assigned to the user, using a passphrase known to the user, using a digital certificate assigned to the user and/or computing device102, and so forth.

Once a user is logged into his or her account through computing device102, manager104allows computing device102to access one or more services106(1. . .m). Manager104can allow computing device102access to services106in a variety of different manners, such as communicating an identifier of computing device102to services106, providing a passphrase or key to computing device102that can in turn be provided to services106, and so forth.

Services106can be a variety of different services that are made available to computing device102and thus made available to a user of computing device102. These services can provide any information and/or functionality that may be desired by a user of computing device102, and different services106can provide different information and/or functionality. Examples of these services include reference information (e.g., maps, weather, news, etc.), entertainment (e.g., games, music, pictures, movies, etc.), advertising information, and so forth.

The particular services106made available to computing device102and/or the user interface presented by computing device102can vary based on the current market of computing device102. The current market of computing device102refers to the market that computing device102is in at the time the user logs into his or her online service account and/or at the current time computing device102is running. This current market is automatically detected as a client-side detected market or a server-side detected market, as discussed in more detail below. These changes in the services106made available to computing device102and/or the user interface presented by computing device102are discussed in more detail below.

In one or more embodiments, the user of computing device102logs into his or her online service account via manager104prior to accessing services106. In alternate embodiments, after the user has logged into his or her online account once, services106can be subsequently accessed without being logged into his or her online account. In such alternate embodiments, maintaining the ability to access services106can optionally be conditioned on the user re-logging in at regular or irregular intervals (e.g., daily, weekly, etc.).

Additionally, the user of computing device102can attempt to access services106without having ever logged into online service account manager104or otherwise not having an online service account. For example, some services106may allow anonymous access, in which case the user need not have an online account. If the user does not have an online service, then the selecting between client-side and server-side market detection still operates as discussed herein, although no account provisioning market would be available.

Computing device102includes an application112, operating system114, market priority table116, and market resource file118. Although application112, market priority table116, and market resource file118are illustrated as being part of operating system114, alternatively one or more of application112, table116, and file118can be implemented separately from operating system114. Operating system114can be a variety of different operating systems. In one or more embodiments, operating system114is an operating system in the Windows® operating system family of operating systems available from Microsoft Corporation of Redmond, Wash. Alternatively, operating system114can be other publicly available or proprietary operating systems.

Application112can be any of a variety of different applications that present a user interface (UI). The execution of application112can be managed by operating system114, or alternatively by another application. In one or more embodiments, application112manages and presents a UI in the form of a toolbar for another application. This other application could be a Web browser application, or alternatively another application.

During execution, application112accesses services106and presents via a UI the functionality provided by services106. The services106made available by application112, as well as the UI presented by application112, can vary based on a current market of computing device102.

As part of varying of the UI presented by application112and determining the services106to be made available by application112, a determination is automatically made by computing device102as to whether a client-side detected market has priority for a service106or a server-side detected market has priority for service106. If a client-side detected market has priority, then client-side market configuration settings are used to configure application112. On the other hand, if a server-side detected market has priority, then server-side market configuration settings are used to configure application112. In one or more embodiments, this determination is made by application112, although alternatively this determination can be made by operating system114and/or another component or module of computing device102.

A client-side detected market refers to a current market of computing device102being determined based on local information available to computing device102. This local information can be, for example, an operating system market setting of operating system114as discussed in more detail below and/or chosen manually by a user of computing device102. An example of a client-side market detection technique is the Multilingual User Interface (MUI) technique used in the Windows® operating system family of operating systems available from Microsoft Corporation of Redmond, Wash. It is to be appreciated that the MUI technique is, however, an example and that alternatively other client-side market detection techniques can be used.

A server-side detected market refers to a current market of computing device102being determined based on information available to a remote server, such as a server implementing online service account manager104or a service106. This information available to the remote server can be, for example, a geographic location of computing device102and/or a market where an online service account for a user of computing device102was provisioned as discussed in more detail below.

Client-side market configuration settings refer to configuration settings that apply for a client-side detected market. These client-side market configuration settings can be available from market priority table116or alternatively other sources. Server-side market configuration settings refer to configuration settings that apply for a server-side detected market. These server-side market configuration settings can be available from market priority table116, from a remote server (e.g., a server implementing online service account manager104or a service106), or alternatively other sources.

The configuration settings, whether client-side market configuration settings or server-side market configuration settings, refer to configuration settings for the application112. These configuration settings include, for example, settings for the UI to be presented by application112, settings for what services106are available to application112, settings for what functionality of each of services106is available to application112, and so forth.

In one or more embodiments different pieces of market information are used in detecting the current market and determining the market configuration settings. Each of these pieces of market information describes a particular market or a location within that market. A market generally refers to a region in which the locations in the region are to be treated the same in terms of configuration settings for application112. For example, a region could be a country, a group of countries, a state or province, and so forth. The specific regions used by the selecting between client-side and server-side market detection discussed herein can vary by implementation based on the desires of the designer of system100. In situations where a piece of market information identifies a location, a market that includes that location can be identified in a variety of different manners, such as by using a table or other mapping of locations to markets.

In one or more embodiments, one or more of the following three pieces of market information is used in detecting the current market and determining the market configuration settings: an operating system market, a geographic location, and an account provisioning market. The operating system market refers to a market for computing device102set by operating system114. This operating system market can be set when operating system114is installed on computing device102, and/or can be set at other times. In one or more embodiments, a user of computing device102can optionally change the operating system market. This allows the user to select the particular market for which he or she desires computing device102to be set.

The geographic location refers to the geographic location of computing device102. The geographic location of computing device102can be determined in different manners. In one or more embodiments, the geographic location of computing device102is determined by a remote server (e.g., a server implementing online service account manager104or a service106) detecting a network address assigned to computing device102. This network address can be, for example, an IP (Internet Protocol) address or other network address assigned to computing device102. Alternatively, the geographic location of computing device102can be determined in other manners, such as based on GPS (Global Positioning System) coordinates obtained by operating system114or another component or module of (or coupled to) computing device102, based on a cellular node or other wireless communications access point accessed by computing device102, and so forth.

The account provisioning market refers to the market in which the user of computing device signed up for or registered for his or her online service account. This account provisioning market can be identified by the user during the signup or registration process, or alternatively can be determined automatically by computing device102and/or online service account manager104. For example, one or more of the techniques discussed above for detecting the geographic location of computing device102can be used to detect the geographic location of computing device102at the time the user signed up for or registered for his or her online service account. These detected geographic locations can be used to identify the account provisioning market for computing device102. Other techniques to identify the account provisioning market for computing device102can also be used, such as an identification made by a service representative (e.g., in situations where the user signs up for or registers for his account offline, such as in a store), a location associated with an identification (e.g., driver's license) or credit card provided by the user, and so forth.

Market priority table116is a table storing data that allows a determination to be made as to the configuration settings for application112. This determination includes a determination of whether a client-side detected market or a server-side detected market has priority. Although discussed herein primarily as a table, it is to be appreciated that market priority table116can be implemented as multiple tables and/or using other data structures other than a table or tables.

Generally the configuration settings for application112are determined based on market priority table116as well as the operating system market, the geographic location, and the account provisioning market pieces of market information discussed above. For each market and each service, the configuration settings for application112for that service are determined. The determination of configuration settings for application112can be viewed as a two-part process. In the first part of the process, a determination is made as to whether a client-side detected market has priority or a server-side detected market has priority. In the second part of the process, a determination is made as to the particular configuration settings for application112given the results of the determination in the first part.

For each of multiple markets, market priority table116includes a record indicating whether a server-side detected market or a client-side detected market has priority for each service106. Application112determines the current market for each service106based on both market priority table116and the pieces of market information that are available at the time application112makes the determination. As new pieces of market information become available, a new determination can be made.

In one or more embodiments, market priority table116includes information identifying the relative priority of the pieces of market information and how they are to be combined to determine which of the client-side market detection or server-side market detection has priority. For example, table116may include information indicating that the client-side market detection has priority if the user is not logged into his or her online service account, but that server-side market detection has priority if the user is logged into his or her online service account. By way of another example, table116may include information indicating that the client-side market detection has priority if the geographic location piece of market information is not currently available to application112, but that server-side market detection has priority if the geographic location piece of market information is currently available to application112. Alternatively, application112or another component or module can be configured with a set of rules or other knowledge indicating how to determine which of the client-side market detection or server-side market detection has priority.

After the determination is made as to whether the server-side detected market has priority or the client-side detected market has priority, market priority table116is used to determine the particular configuration settings for application112given the current market. The current market is the server-side detected market if the server-side detected market has priority, and is the client-side detected market if the client-side detected market has priority. For each of multiple markets, market priority table116identifies the configuration settings for application112based on the three pieces of market information discussed above. Different configuration settings can be stored in table116as the client-side market configuration settings for a particular market than are stored as the server-side market configuration settings. Alternatively, the configuration settings can be obtained from other sources, such as services106.

In one or more embodiments, application112determines the configuration settings for application112. Alternatively, the configuration settings for application112can be determined by a different module or component of computing device102, such as operating system114or another module or component. In other alternatives, the configuration settings for application112can be determined at least in part by a remote server or service, such as a service106. For example, if server-side market configuration settings have priority over client-side market configuration settings, then a service106can determine the particular configuration settings for that service106and communicate those configuration settings to application112.

Additionally, in one or more embodiments a service106is able to override the configuration settings determined by application112. An indication of when service106is able to override the configuration settings can be maintained in market priority table116, or alternatively in another table or record of computing device102or another device. The indication identifies which particular services can override which particular configuration settings for which particular markets. In such embodiments, a service106can send a communication to application112requesting that a particular configuration setting for that service106be overridden. For example, the service106could send an indication to application112that a different UI is to be presented by application112, or different functionality of the service106is to be made available to the user. If market priority table116indicates that the service106can override the configuration settings, then application112will change the configuration settings to new configuration settings as requested by service106; otherwise application112will not make the change and will keep the current configuration setting.

The determination of the configuration settings for application112can be made at a variety of different times. In one or more embodiments, the configuration settings for application112are determined when application112is installed, each time application112is run, and when the user logs into his or her online service account. The configuration settings for application112can alternatively be determined at different times, such as at regular or irregular intervals, in response to a request from a remote server (e.g., a server implementing online service account manager104or a service106), in response to a request from another component or module of computing device102(e.g., operating system114or another component or module), in response to a user request, and so forth.

Market priority table116can change over time. In one or more embodiments, computing device102obtains a feed via network108of new data for market priority table116. The feed of data can be an update of changes to the data since the last time data for table116was communicated to device102, or alternatively can be a retransmission of all the data in table116. This feed of data can be implemented in a variety of manners, such as a location of a server device that is accessed by a component or module of computing device102to obtain the data, a server device broadcasting the data that is received by a component or module of computing device102, and so forth. An initial market priority table116can be obtained by computing device102when application112is installed on computing device102as part of the installation process. Alternatively, the initial market priority table116can be received as part of the feed via network108.

The ability to change market priority table116over time allows changes in configuration settings to be easily made for different markets. Various changes can be made, such as permitting or denying access to services106for different markets, changing the functionality provided by particular services106for different markets, changing a UI that is presented for particular services106for different markets, and so forth.

Additionally, in one or more embodiments an indication of when table116was most recently updated is maintained. This indication can be maintained in table116, by application112, or alternatively by some other component or module of computing device102. In determining configuration settings for application112, a check is made as to whether priority table116has been updated within a threshold amount of time. This threshold amount of time can vary, such as two hours, one day, one week, and so forth. If market priority table116has not been updated within the threshold amount of time, then application112takes a responsive action to restrict access to services106. This responsive action can be implemented in different manners, such as preventing all access to services106, presenting a UI indicating that services106cannot be accessed until table116is updated, disabling application112until table116is updated, and so forth. Application112is thus able to impose a restriction on its configuration settings so that changes to the configuration settings via updates to table116are not circumvented.

Furthermore, additional security constraints can be imposed to prevent a user of computing device102from circumventing these restrictions imposed on the configuration settings. These additional security constraints can be imposed in a variety of different manners, and are designed to prevent an outdated market priority table116from being used by application112. For example, a service106can request some information from application112, such as market priority table116(or a hash thereof) to verify that application112has a most recent version of (or at least an acceptable version of) table116.

Computing device102also includes market resource file118. Market resource file118contains entry points for different services106for different markets. The manner in which these entry points are identified can vary based on the manner in which services106are implemented. In one or more embodiments, the entry points are Uniform Resource Locators (URLs) of services106. In other embodiments the entry points can be identified in different manners, such as network addresses (e.g., IP or other addresses), other service identifiers, and so forth.

The particular entry points used by application112for services106are determined based on the current market of computing device102. This current market of computing device102is the current market that was determined as discussed above for the configuration settings for application112. When the current market of computing device102changes, then market resource file118is accessed to determine the appropriate entry points for services106for the new current market.

Market resource file118can change over time. In one or more embodiments, computing device102obtains a feed via network108of data for market resource file118. The feed of data can be an update of changes to the data since the last time data for file118was communicated to device102, or alternatively can be a retransmission of all the data in file118. This feed of data can be implemented in a variety of manners, such as a location of a server device that is accessed by a component or module of computing device102to obtain the data, a server device broadcasting the data that is received by a component or module of computing device102, and so forth. The feed via which market resource file118is received can be the same feed used to obtain updates to market priority table116, or alternatively a different feed. An initial market resource file118can be obtained by computing device102when application112is installed on computing device102as part of the installation process. Alternatively, the initial market resource file118can be received as part of the feed via network108. If situations arise where an attempt to obtain changes to or a newer version of market resource file118fails, then the version of market resource file118already on computing device102is used. Subsequent attempts can then be made to obtain the changes to, or newer version of, market resource file118.

The selecting between client-side and server-side market detection discussed herein allows for different services, functionality, and user interfaces to be made available to users of computing devices102in different markets. Users are able to move their computing devices102to different markets and have them operate appropriately based on the current market and the various pieces of market information.

By way of example, assume that a user in a first market installs an operating system on his or her computing device identifying the first market, registers for his or her online service account in the first market, and desires to access services106while the computing device is physically located in the first market. The current market would be identified as the first market, and the market priority table116would indicate as configuration settings that the user is to be presented with UIs in his or her language and is allowed to access services that are available to users in the first market.

By way of another example, assume this same user travels to a second market in which a different language is spoken and in which restrictions on accessing a particular service are placed on citizens of that second market. The current market could be identified as the first market because the first market is where the user registered for his or her online service account. The market priority table116would indicate as configuration settings that the user is to be presented with UIs in the language of the first market. The market priority table116would further indicate that the user is allowed to access services that are available to users in the first market, even though access to such services by citizens of the second market is prohibited.

By way of yet another example, assume that a second user in the second market installs an operating system on his or her computing device identifying the second market, registers for his or her online service account in the second market, and desires to access services106that citizens of the second market are prohibited from accessing. The current market could be identified as the second market because the second market is where the user registered for his or her online service account. When this second user is using his or her computing device in the second market, market priority table116would indicate that the user is not permitted to access those particular services106. Furthermore, if the user travels to the first market, market priority table116would still indicate that the user is not permitted to access those particular services106because the user registered for his or her online service account in the second market. Thus, the second user is prohibited from accessing those particular services while in the first market even though citizens of the first market are permitted to access those particular services106.

FIG. 2is a flowchart illustrating an example process200for selecting between client-side and server-side market detection in accordance with one or more embodiments. Process200can be carried out by various components or modules, such as application112and/or service106ofFIG. 1, and can be implemented in software, firmware, hardware, or combinations thereof. Process200is an example process for selecting between client-side and server-side market detection; additional discussions of selecting between client-side and server-side market detection are included herein with reference to different figures.

In process200, information identifying a geographic location of a device is obtained (act202). Information identifying an operating system market of an operating system of the device is also obtained (act204). Furthermore, information identifying a market where an online service account of a user of the device was provisioned is obtained (act206). This various information obtained in acts202,204, and206are the pieces of market information discussed above.

Based on this information obtained in acts202,204, and206, a determination is made as to whether a client-side detected market or a server-side detected market has priority (act208). If the client-side detected market has priority, then an application of the device is configured in accordance with client-side market configuration settings (act210). As discussed above, these configuration settings can include different presentations for UIs, different services to be made available, different functionality of services to be made available, and so forth.

However, if the server-side detected market has priority, then an application of the device is configured in accordance with server-side market configuration settings (act212). As discussed above, these configuration settings can include different presentations for UIs, different services to be made available, different functionality of services to be made available, and so forth.

FIG. 3is a flowchart illustrating an example process300for selecting between client-side and server-side market detection in accordance with one or more embodiments. Process300can be carried out by various components or modules, such as application112and/or service106ofFIG. 1, and can be implemented in software, firmware, hardware, or combinations thereof. Process300is an example process for selecting between client-side and server-side market detection; additional discussions of selecting between client-side and server-side market detection are included herein with reference to different figures.

Process300selects between client-side market detection and server-side market detection, identifying configuration settings for an application in situations where the user may not yet be logged in to his or her online service account. Process300thus allows initial configuration settings for an application to be set. These configuration settings can subsequently be changed when the user logs into his or her online service account, as discussed in more detail below.

In process300, the market priority table is accessed (act302). Additionally, a check is made as to whether server-side market detection is available (act304). In one or more embodiments, server-side market detection is available only in situations where the user is logged in to his or her online service account. In other embodiments, server-side market detection is available in other situations, such as where the user previously logged into his or her online service account and/or accessed a remote service and had server-side market configuration settings stored on his or her device.

Process300then proceeds based on whether server-side market detection is available (act306). If server-side market detection is not available, then client-side market configuration settings from the market priority table are used to configure the application (act308). However, if server-side market detection is available, then a determination is made as to whether the server-side detected market has priority (act310). As discussed above, this determination is based on the market priority table.

If the server-side detected market does not have priority, then client-side market configuration settings have priority and are used to configure the application (act308). If the server-side detected market does have priority, then server-side market configuration settings are used to configure the application (act312).

Regardless of whether the server-side or client-side market configuration settings are used to configure the application, a check is made as to whether an individual service can override the configuration settings for the current market (act314). This check can be made, for example, based on data stored in the market priority table as discussed above. If an individual service cannot override the configuration settings, then the configuration settings used in act308or312continue to be used for all services (act316).

However, if an individual service can override the configuration settings, then configuration settings for the service are obtained (act318). These configuration settings for the service can be obtained from different sources, such as the service itself, the market priority table, and so forth. These obtained service configuration settings are used to configure the application for that service (act320).

FIG. 4is a flowchart illustrating an example process400for selecting between client-side and server-side market detection in accordance with one or more embodiments. Process400can be carried out by various components or modules, such as application112and/or service106ofFIG. 1, and can be implemented in software, firmware, hardware, or combinations thereof. Process400is an example process for selecting between client-side and server-side market detection; additional discussions of selecting between client-side and server-side market detection are included herein with reference to different figures.

Process400identifies configuration settings for an application after the user has logged in to his or her online service account. Process400can be performed, for example, after process300ofFIG. 3is performed, optionally changing the configuration settings used in process300as discussed in more detail below.

In process400, the user having logged in to his or her service account is identified (act402). This login can be identified in different manners, such as the user logging in using the component or module implementing process400, receiving an indication of the user having logged in from the online service account, and so forth.

A check is then made as to whether the server-side detected market has priority (act404). If the server-side detected market does not have priority, then process400ends (act406) with any previous configuration settings (e.g., configuration settings resulting from process300ofFIG. 3) continuing to be used. However, if the server-side detected market does have priority, then the server-side market configuration settings are used to configure the application (act408).

A check is made as to whether an individual service can override the configuration settings for the current market (act410). This check can be made, for example, based on data stored in the market priority table as discussed above. If an individual service cannot override the configuration settings, then the server-side market configuration settings used in act408continue to be used for all services (act412), and process400ends (act406).

However, if an individual service can override the configuration settings, then configuration settings for the service are obtained (act414). These configuration settings for the service can be obtained from different sources, such as the service itself, the market priority table, and so forth. These obtained service configuration settings are used to configure the application for that service (act416), and process400ends (act406).

FIG. 5illustrates an example computing device500that can be configured to implement the selecting between client-side and server-side market detection in accordance with one or more embodiments. Computing device500can be, for example, computing device102ofFIG. 1, or can implement manager104or one or more service106ofFIG. 1.

Computing device500includes one or more processors or processing units502, one or more computer readable media504which can include one or more memory and/or storage components506, one or more input/output (IO) devices508, and a bus510that allows the various components and devices to communicate with one another. Computer readable media504and/or one or more I/O devices508can be included as part of, or alternatively may be coupled to, computing device500. Bus510represents one or more of several types of bus structures, including a memory bus or memory controller, a peripheral bus, an accelerated graphics port, a processor or local bus, and so forth using a variety of different bus architectures. Bus510can include wired and/or wireless buses.

Memory/storage component506represents one or more computer storage media. Component506can include volatile media (such as random access memory (RAM)) and/or nonvolatile media (such as read only memory (ROM), Flash memory, optical disks, magnetic disks, and so forth). Component506can include fixed media (e.g., RAM, ROM, a fixed hard drive, etc.) as well as removable media (e.g., a Flash memory drive, a removable hard drive, an optical disk, and so forth).

The techniques discussed herein can be implemented in software, with instructions being executed by one or more processing units502. It is to be appreciated that different instructions can be stored in different components of computing device500, such as in a processing unit502, in various cache memories of a processing unit502, in other cache memories of device500(not shown), on other computer readable media, and so forth. Additionally, it is to be appreciated that the location where instructions are stored in computing device500can change over time.

One or more input/output devices508allow a user to enter commands and information to computing device500, and also allows information to be presented to the user and/or other components or devices. Examples of input devices include a keyboard, a cursor control device (e.g., a mouse), a microphone, a scanner, and so forth. Examples of output devices include a display device (e.g., a monitor or projector), speakers, a printer, a network card, and so forth.

“Computer storage media” include volatile and non-volatile, removable and non-removable media implemented in any method or technology for storage of information such as computer readable instructions, data structures, program modules, or other data. Computer storage media include, but are not limited to, RAM, ROM, EEPROM, flash memory or other memory technology, CD-ROM, digital versatile disks (DVD) or other optical storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other medium which can be used to store the desired information and which can be accessed by a computer.

Generally, any of the functions or techniques described herein can be implemented using software, firmware, hardware (e.g., fixed logic circuitry), manual processing, or a combination of these implementations. The terms “module” and “functionality,” and “component” as used herein generally represent software, firmware, hardware, or combinations thereof. In the case of a software implementation, the module, functionality, or component represents program code that performs specified tasks when executed on a processor (e.g., CPU or CPUs). The program code can be stored in one or more computer readable memory devices, further description of which may be found with reference toFIG. 5. The features of the selecting between client-side and server-side market detection techniques described herein are platform-independent, meaning that the techniques can be implemented on a variety of commercial computing platforms having a variety of processors.