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
-~----------~----~----~----~------~----~------~--~---