Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(98)

Side by Side Diff: android_webview/browser/aw_content_browser_client.cc

Issue 135443002: Fix race condition introduced in r242200 where AwContentsIoThreadClient is queried before a subfram… (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | android_webview/browser/aw_contents_io_thread_client.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "android_webview/browser/aw_content_browser_client.h" 5 #include "android_webview/browser/aw_content_browser_client.h"
6 6
7 #include "android_webview/browser/aw_browser_context.h" 7 #include "android_webview/browser/aw_browser_context.h"
8 #include "android_webview/browser/aw_browser_main_parts.h" 8 #include "android_webview/browser/aw_browser_main_parts.h"
9 #include "android_webview/browser/aw_contents_client_bridge_base.h" 9 #include "android_webview/browser/aw_contents_client_bridge_base.h"
10 #include "android_webview/browser/aw_contents_io_thread_client.h"
10 #include "android_webview/browser/aw_cookie_access_policy.h" 11 #include "android_webview/browser/aw_cookie_access_policy.h"
11 #include "android_webview/browser/aw_quota_permission_context.h" 12 #include "android_webview/browser/aw_quota_permission_context.h"
12 #include "android_webview/browser/aw_web_preferences_populater.h" 13 #include "android_webview/browser/aw_web_preferences_populater.h"
13 #include "android_webview/browser/jni_dependency_factory.h" 14 #include "android_webview/browser/jni_dependency_factory.h"
14 #include "android_webview/browser/net_disk_cache_remover.h" 15 #include "android_webview/browser/net_disk_cache_remover.h"
15 #include "android_webview/browser/renderer_host/aw_resource_dispatcher_host_dele gate.h" 16 #include "android_webview/browser/renderer_host/aw_resource_dispatcher_host_dele gate.h"
16 #include "android_webview/common/render_view_messages.h" 17 #include "android_webview/common/render_view_messages.h"
17 #include "android_webview/common/url_constants.h" 18 #include "android_webview/common/url_constants.h"
18 #include "base/base_paths_android.h" 19 #include "base/base_paths_android.h"
19 #include "base/path_service.h" 20 #include "base/path_service.h"
(...skipping 29 matching lines...) Expand all
49 virtual void OverrideThreadForMessage( 50 virtual void OverrideThreadForMessage(
50 const IPC::Message& message, 51 const IPC::Message& message,
51 BrowserThread::ID* thread) OVERRIDE; 52 BrowserThread::ID* thread) OVERRIDE;
52 virtual bool OnMessageReceived( 53 virtual bool OnMessageReceived(
53 const IPC::Message& message, 54 const IPC::Message& message,
54 bool* message_was_ok) OVERRIDE; 55 bool* message_was_ok) OVERRIDE;
55 56
56 void OnShouldOverrideUrlLoading(int routing_id, 57 void OnShouldOverrideUrlLoading(int routing_id,
57 const base::string16& url, 58 const base::string16& url,
58 bool* ignore_navigation); 59 bool* ignore_navigation);
60 void OnSubFrameCreated(int parent_render_frame_id, int child_render_frame_id);
59 61
60 private: 62 private:
61 virtual ~AwContentsMessageFilter(); 63 virtual ~AwContentsMessageFilter();
62 64
63 int process_id_; 65 int process_id_;
64 66
65 DISALLOW_COPY_AND_ASSIGN(AwContentsMessageFilter); 67 DISALLOW_COPY_AND_ASSIGN(AwContentsMessageFilter);
66 }; 68 };
67 69
68 AwContentsMessageFilter::AwContentsMessageFilter(int process_id) 70 AwContentsMessageFilter::AwContentsMessageFilter(int process_id)
69 : process_id_(process_id) { 71 : process_id_(process_id) {
70 } 72 }
71 73
72 AwContentsMessageFilter::~AwContentsMessageFilter() { 74 AwContentsMessageFilter::~AwContentsMessageFilter() {
73 } 75 }
74 76
75 void AwContentsMessageFilter::OverrideThreadForMessage( 77 void AwContentsMessageFilter::OverrideThreadForMessage(
76 const IPC::Message& message, BrowserThread::ID* thread) { 78 const IPC::Message& message, BrowserThread::ID* thread) {
77 if (message.type() == AwViewHostMsg_ShouldOverrideUrlLoading::ID) { 79 if (message.type() == AwViewHostMsg_ShouldOverrideUrlLoading::ID) {
78 *thread = BrowserThread::UI; 80 *thread = BrowserThread::UI;
79 } 81 }
80 } 82 }
81 83
82 bool AwContentsMessageFilter::OnMessageReceived(const IPC::Message& message, 84 bool AwContentsMessageFilter::OnMessageReceived(const IPC::Message& message,
83 bool* message_was_ok) { 85 bool* message_was_ok) {
84 bool handled = true; 86 bool handled = true;
85 IPC_BEGIN_MESSAGE_MAP_EX(AwContentsMessageFilter, message, *message_was_ok) 87 IPC_BEGIN_MESSAGE_MAP_EX(AwContentsMessageFilter, message, *message_was_ok)
86 IPC_MESSAGE_HANDLER(AwViewHostMsg_ShouldOverrideUrlLoading, 88 IPC_MESSAGE_HANDLER(AwViewHostMsg_ShouldOverrideUrlLoading,
87 OnShouldOverrideUrlLoading) 89 OnShouldOverrideUrlLoading)
90 IPC_MESSAGE_HANDLER(AwViewHostMsg_SubFrameCreated, OnSubFrameCreated)
88 IPC_MESSAGE_UNHANDLED(handled = false) 91 IPC_MESSAGE_UNHANDLED(handled = false)
89 IPC_END_MESSAGE_MAP() 92 IPC_END_MESSAGE_MAP()
90 return handled; 93 return handled;
91 } 94 }
92 95
93 void AwContentsMessageFilter::OnShouldOverrideUrlLoading( 96 void AwContentsMessageFilter::OnShouldOverrideUrlLoading(
94 int render_frame_id, 97 int render_frame_id,
95 const base::string16& url, 98 const base::string16& url,
96 bool* ignore_navigation) { 99 bool* ignore_navigation) {
97 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 100 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
98 *ignore_navigation = false; 101 *ignore_navigation = false;
99 AwContentsClientBridgeBase* client = 102 AwContentsClientBridgeBase* client =
100 AwContentsClientBridgeBase::FromID(process_id_, render_frame_id); 103 AwContentsClientBridgeBase::FromID(process_id_, render_frame_id);
101 if (client) { 104 if (client) {
102 *ignore_navigation = client->ShouldOverrideUrlLoading(url); 105 *ignore_navigation = client->ShouldOverrideUrlLoading(url);
103 } else { 106 } else {
104 LOG(WARNING) << "Failed to find the associated render view host for url: " 107 LOG(WARNING) << "Failed to find the associated render view host for url: "
105 << url; 108 << url;
106 } 109 }
107 } 110 }
108 111
112 void AwContentsMessageFilter::OnSubFrameCreated(int parent_render_frame_id,
113 int child_render_frame_id) {
114 AwContentsIoThreadClient::SubFrameCreated(
115 process_id_, parent_render_frame_id, child_render_frame_id);
116 }
117
109 class AwAccessTokenStore : public content::AccessTokenStore { 118 class AwAccessTokenStore : public content::AccessTokenStore {
110 public: 119 public:
111 AwAccessTokenStore() { } 120 AwAccessTokenStore() { }
112 121
113 // content::AccessTokenStore implementation 122 // content::AccessTokenStore implementation
114 virtual void LoadAccessTokens( 123 virtual void LoadAccessTokens(
115 const LoadAccessTokensCallbackType& request) OVERRIDE { 124 const LoadAccessTokensCallbackType& request) OVERRIDE {
116 AccessTokenStore::AccessTokenSet access_token_set; 125 AccessTokenStore::AccessTokenSet access_token_set;
117 // AccessTokenSet and net::URLRequestContextGetter not used on Android, 126 // AccessTokenSet and net::URLRequestContextGetter not used on Android,
118 // but Run needs to be called to finish the geolocation setup. 127 // but Run needs to be called to finish the geolocation setup.
(...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after
482 WebPreferences* web_prefs) { 491 WebPreferences* web_prefs) {
483 if (!preferences_populater_.get()) { 492 if (!preferences_populater_.get()) {
484 preferences_populater_ = make_scoped_ptr(native_factory_-> 493 preferences_populater_ = make_scoped_ptr(native_factory_->
485 CreateWebPreferencesPopulater()); 494 CreateWebPreferencesPopulater());
486 } 495 }
487 preferences_populater_->PopulateFor( 496 preferences_populater_->PopulateFor(
488 content::WebContents::FromRenderViewHost(rvh), web_prefs); 497 content::WebContents::FromRenderViewHost(rvh), web_prefs);
489 } 498 }
490 499
491 } // namespace android_webview 500 } // namespace android_webview
OLDNEW
« no previous file with comments | « no previous file | android_webview/browser/aw_contents_io_thread_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698