diff options
author | boliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-08 04:08:47 +0000 |
---|---|---|
committer | boliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-08 04:08:47 +0000 |
commit | d664df429311bac046907ee1ec0f503f1728ad98 (patch) | |
tree | c3cf91914209741c5b48a950e3d6fb2e87bf5683 /android_webview | |
parent | cd2e1574bc9d9b8404c79d6ddc09e365b6fe401e (diff) | |
download | chromium_src-d664df429311bac046907ee1ec0f503f1728ad98.zip chromium_src-d664df429311bac046907ee1ec0f503f1728ad98.tar.gz chromium_src-d664df429311bac046907ee1ec0f503f1728ad98.tar.bz2 |
Get renderer compositor message loop override dynamically
UI MessageLoop has not started when AwContentRedererClient is first
constructed. So pass in a getter function instead. This still does not
*guarantee* message loop will be constructed by the time Override is
called, but it should be ok since it *should* only be called in the
renderer. Add a DCHECK for null anyway.
R=joth@chromium.org
Android only change, ran through android bots.
NOTRY=true
BUG=179436
Review URL: https://chromiumcodereview.appspot.com/12639002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@186882 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'android_webview')
-rw-r--r-- | android_webview/lib/main/aw_main_delegate.cc | 25 | ||||
-rw-r--r-- | android_webview/renderer/aw_content_renderer_client.cc | 6 | ||||
-rw-r--r-- | android_webview/renderer/aw_content_renderer_client.h | 7 |
3 files changed, 23 insertions, 15 deletions
diff --git a/android_webview/lib/main/aw_main_delegate.cc b/android_webview/lib/main/aw_main_delegate.cc index 99a4b0d..4768c19 100644 --- a/android_webview/lib/main/aw_main_delegate.cc +++ b/android_webview/lib/main/aw_main_delegate.cc @@ -75,19 +75,24 @@ content::ContentBrowserClient* return content_browser_client_.get(); } -content::ContentRendererClient* - AwMainDelegate::CreateContentRendererClient() { - MessageLoop* renderer_compositor_loop = NULL; - +namespace { +MessageLoop* GetRendererCompositorThreadOverrideLoop() { CommandLine* command_line = CommandLine::ForCurrentProcess(); - if (command_line->HasSwitch(switches::kMergeUIAndRendererCompositorThreads)) { - renderer_compositor_loop = - content::BrowserThread::UnsafeGetMessageLoopForThread( - content::BrowserThread::UI); - } + if (!command_line->HasSwitch( + switches::kMergeUIAndRendererCompositorThreads)) + return NULL; + + MessageLoop* rv = content::BrowserThread::UnsafeGetMessageLoopForThread( + content::BrowserThread::UI); + DCHECK(rv); + return rv; +} +} +content::ContentRendererClient* + AwMainDelegate::CreateContentRendererClient() { content_renderer_client_.reset( - new AwContentRendererClient(renderer_compositor_loop)); + new AwContentRendererClient(&GetRendererCompositorThreadOverrideLoop)); return content_renderer_client_.get(); } diff --git a/android_webview/renderer/aw_content_renderer_client.cc b/android_webview/renderer/aw_content_renderer_client.cc index b0abcd0..14db191 100644 --- a/android_webview/renderer/aw_content_renderer_client.cc +++ b/android_webview/renderer/aw_content_renderer_client.cc @@ -22,8 +22,8 @@ namespace android_webview { AwContentRendererClient::AwContentRendererClient( - MessageLoop* compositor_message_loop) - : compositor_message_loop_(compositor_message_loop) { + CompositorMessageLoopGetter* compositor_message_loop_getter) + : compositor_message_loop_getter_(compositor_message_loop_getter) { } AwContentRendererClient::~AwContentRendererClient() { @@ -97,7 +97,7 @@ void AwContentRendererClient::PrefetchHostName(const char* hostname, } MessageLoop* AwContentRendererClient::OverrideCompositorMessageLoop() const { - return compositor_message_loop_; + return (*compositor_message_loop_getter_)(); } } // namespace android_webview diff --git a/android_webview/renderer/aw_content_renderer_client.h b/android_webview/renderer/aw_content_renderer_client.h index 72112c2..2df9141 100644 --- a/android_webview/renderer/aw_content_renderer_client.h +++ b/android_webview/renderer/aw_content_renderer_client.h @@ -18,7 +18,10 @@ namespace android_webview { class AwContentRendererClient : public content::ContentRendererClient { public: - explicit AwContentRendererClient(MessageLoop* compositor_message_loop); + typedef MessageLoop* CompositorMessageLoopGetter(); + + explicit AwContentRendererClient( + CompositorMessageLoopGetter* compositor_message_loop_getter); virtual ~AwContentRendererClient(); // ContentRendererClient implementation. @@ -41,7 +44,7 @@ class AwContentRendererClient : public content::ContentRendererClient { private: scoped_ptr<AwRenderProcessObserver> aw_render_process_observer_; scoped_ptr<components::VisitedLinkSlave> visited_link_slave_; - MessageLoop* compositor_message_loop_; + CompositorMessageLoopGetter* compositor_message_loop_getter_; }; } // namespace android_webview |