summaryrefslogtreecommitdiffstats
path: root/android_webview
diff options
context:
space:
mode:
authorboliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-08 04:08:47 +0000
committerboliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-08 04:08:47 +0000
commitd664df429311bac046907ee1ec0f503f1728ad98 (patch)
treec3cf91914209741c5b48a950e3d6fb2e87bf5683 /android_webview
parentcd2e1574bc9d9b8404c79d6ddc09e365b6fe401e (diff)
downloadchromium_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.cc25
-rw-r--r--android_webview/renderer/aw_content_renderer_client.cc6
-rw-r--r--android_webview/renderer/aw_content_renderer_client.h7
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