Comment #6 on issue 22294 by [email protected]:  
ChromeURLRequestContext has races between UI and IO threads
http://code.google.com/p/chromium/issues/detail?id=22294

The following revision refers to this bug:
     http://src.chromium.org/viewvc/chrome?view=rev&revision=29880

------------------------------------------------------------------------
r29880 | [email protected] | 2009-10-22 23:33:31 -0700 (Thu, 22 Oct 2009)  
| 20 lines
Changed paths:
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/automation/automation_profile_impl.cc?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/automation/automation_profile_impl.h?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/automation/automation_provider.cc?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/browsing_data_remover.cc?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/browsing_data_remover.h?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/chrome_plugin_host.cc?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/cookies_table_model.cc?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/dom_ui/new_tab_page_sync_handler.cc?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/download/download_file.cc?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/download/download_file.h?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/download/download_manager.cc?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/download/download_manager.h?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/download/save_file_manager.cc?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/download/save_file_manager.h?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/download/save_package.cc?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/download/save_package.h?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/extensions/extensions_service.cc?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/gtk/options/cookies_view_unittest.cc?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/importer/toolbar_importer.cc?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/net/chrome_url_request_context.cc?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/net/chrome_url_request_context.h?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/net/resolve_proxy_msg_helper.cc?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/net/sdch_dictionary_fetcher.cc?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/net/url_fetcher.cc?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/net/url_fetcher.h?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/net/url_fetcher_unittest.cc?r1=29880&r2=29879
    A  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/net/url_request_context_getter.cc
    A  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/net/url_request_context_getter.h
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/plugin_process_host.cc?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/profile.cc?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/profile.h?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/profile_manager.cc?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/renderer_host/resource_dispatcher_host.cc?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/renderer_host/resource_dispatcher_host.h?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/renderer_host/resource_message_filter.cc?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/renderer_host/resource_message_filter.h?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/spellchecker.cc?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/spellchecker.h?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/sync/glue/http_bridge.cc?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/sync/glue/http_bridge.h?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/sync/glue/http_bridge_unittest.cc?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/sync/glue/sync_backend_host.cc?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/sync/glue/sync_backend_host.h?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/chrome.gyp?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/common/appcache/appcache_dispatcher_host.cc?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/common/appcache/appcache_dispatcher_host.h?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/common/appcache/chrome_appcache_service.h?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/common/chrome_plugin_unittest.cc?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/test/testing_profile.h?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/net/proxy/proxy_config_service_fixed.h?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/net/proxy/proxy_service.cc?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/net/proxy/proxy_service.h?r1=29880&r2=29879
    M  
http://src.chromium.org/viewvc/chrome/trunk/src/webkit/tools/test_shell/test_shell_request_context.cc?r1=29880&r2=29879

Move initialization of ChromeURLRequestContexts to the IO thread.

Before, these URLRequestContexts were lazily created from the UI thread.  
Unfortunately that model made it easy for consumers on the UI thread to  
poke at stuff which was being used from the IO thread, and introduce races.

So instead of providing a URLRequestContext*, the Profile now vends a  
URLRequestContextGetter*.

The consequence of this is:

* Consumers on the UI thread can no longer get access to a  
URLRequestContext.
* Consumers on the IO thread need to call  
URLRequestContextGetter::GetURLRequestContext() to get at the context. This  
uses the same style lazy-creation of URLRequestContexts, albeit from the IO  
thread.

OK, so now the smelly part:

There were a couple of consumers of URLRequestContext on the UI thread that  
can't easily be moved to the IO thread -- these are the consumers of the  
cookie store. Before they could happily mess with the cookie store from the  
UI thread, and this was fine since CookieStore is threadsafe. However under  
the new model, they have no way to get at the URLRequestContext from the UI  
thread, hence can't get a pointer to the cookie store.

To support that use-cases, I bastardized the API some by adding a  
URLRequestContextGetter::GetCookieStore() method that lets UI thread  
consumers get a pointer to the cookie store, since we know this particular  
cross-thread usage is safe.

BUG=http://crbug.com/22294

Review URL: http://codereview.chromium.org/258008
------------------------------------------------------------------------


--
You received this message because you are listed in the owner
or CC fields of this issue, or because you starred this issue.
You may adjust your issue notification preferences at:
http://code.google.com/hosting/settings

--~--~---------~--~----~------------~-------~--~----~
Automated mail from issue updates at http://crbug.com/
Subscription options: http://groups.google.com/group/chromium-bugs
-~----------~----~----~----~------~----~------~--~---

Reply via email to