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

Side by Side Diff: content/browser/android/web_contents_observer_proxy.cc

Issue 786933005: [Android] Add proxy for Java-based WebContentsObservers (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Code review Created 5 years, 10 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "content/browser/android/web_contents_observer_android.h" 5 #include "content/browser/android/web_contents_observer_proxy.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include <jni.h>
10
11 #include "base/android/jni_android.h" 9 #include "base/android/jni_android.h"
12 #include "base/android/jni_string.h" 10 #include "base/android/jni_string.h"
13 #include "base/android/scoped_java_ref.h" 11 #include "base/android/scoped_java_ref.h"
14 #include "content/browser/renderer_host/render_widget_host_impl.h" 12 #include "content/browser/renderer_host/render_widget_host_impl.h"
15 #include "content/browser/web_contents/web_contents_impl.h" 13 #include "content/browser/web_contents/web_contents_impl.h"
16 #include "content/public/browser/navigation_details.h" 14 #include "content/public/browser/navigation_details.h"
17 #include "content/public/browser/navigation_entry.h" 15 #include "content/public/browser/navigation_entry.h"
18 #include "jni/WebContentsObserver_jni.h" 16 #include "jni/WebContentsObserverProxy_jni.h"
19 17
20 using base::android::AttachCurrentThread; 18 using base::android::AttachCurrentThread;
21 using base::android::ScopedJavaLocalRef; 19 using base::android::ScopedJavaLocalRef;
22 using base::android::ConvertUTF8ToJavaString; 20 using base::android::ConvertUTF8ToJavaString;
23 using base::android::ConvertUTF16ToJavaString; 21 using base::android::ConvertUTF16ToJavaString;
24 22
25 namespace content { 23 namespace content {
26 24
27 // TODO(dcheng): File a bug. This class incorrectly passes just a frame ID, 25 // TODO(dcheng): File a bug. This class incorrectly passes just a frame ID,
Yaron 2015/02/27 19:34:57 Aside: "TODO: file a bug" is amusing
jdduke (slow) 2015/03/03 17:05:17 Hey! Some bugs are tricky to file!
28 // which is not sufficient to identify a frame (since frame IDs are scoped per 26 // which is not sufficient to identify a frame (since frame IDs are scoped per
29 // render process, and so may collide). 27 // render process, and so may collide).
30 WebContentsObserverAndroid::WebContentsObserverAndroid( 28 WebContentsObserverProxy::WebContentsObserverProxy(JNIEnv* env,
31 JNIEnv* env, 29 jobject obj,
32 jobject obj, 30 WebContents* web_contents)
33 WebContents* web_contents) 31 : WebContentsObserver(web_contents), weak_java_observer_(env, obj) {
34 : WebContentsObserver(web_contents),
35 weak_java_observer_(env, obj){
36 } 32 }
37 33
38 WebContentsObserverAndroid::~WebContentsObserverAndroid() { 34 WebContentsObserverProxy::~WebContentsObserverProxy() {
39 } 35 }
40 36
41 jlong Init(JNIEnv* env, jobject obj, jobject java_web_contents) { 37 jlong Init(JNIEnv* env, jobject obj, jobject java_web_contents) {
42 WebContents* web_contents = 38 WebContents* web_contents =
43 WebContents::FromJavaWebContents(java_web_contents); 39 WebContents::FromJavaWebContents(java_web_contents);
44 CHECK(web_contents); 40 CHECK(web_contents);
45 41
46 WebContentsObserverAndroid* native_observer = new WebContentsObserverAndroid( 42 WebContentsObserverProxy* native_observer =
47 env, obj, web_contents); 43 new WebContentsObserverProxy(env, obj, web_contents);
48 return reinterpret_cast<intptr_t>(native_observer); 44 return reinterpret_cast<intptr_t>(native_observer);
49 } 45 }
50 46
51 void WebContentsObserverAndroid::Destroy(JNIEnv* env, jobject obj) { 47 void WebContentsObserverProxy::Destroy(JNIEnv* env, jobject obj) {
52 delete this; 48 delete this;
53 } 49 }
54 50
55 void WebContentsObserverAndroid::WebContentsDestroyed() { 51 void WebContentsObserverProxy::WebContentsDestroyed() {
56 JNIEnv* env = AttachCurrentThread(); 52 JNIEnv* env = AttachCurrentThread();
57 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); 53 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env));
58 if (obj.is_null()) { 54 if (obj.is_null()) {
59 delete this; 55 delete this;
60 } else { 56 } else {
61 // The java side will destroy |this| 57 // The java side will destroy |this|
62 Java_WebContentsObserver_detachFromWebContents(env, obj.obj()); 58 Java_WebContentsObserverProxy_destroy(env, obj.obj());
63 } 59 }
64 } 60 }
65 61
66 void WebContentsObserverAndroid::RenderViewReady() { 62 void WebContentsObserverProxy::RenderViewReady() {
67 JNIEnv* env = AttachCurrentThread(); 63 JNIEnv* env = AttachCurrentThread();
68 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); 64 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env));
69 if (obj.is_null()) 65 if (obj.is_null())
70 return; 66 return;
71 Java_WebContentsObserver_renderViewReady(env, obj.obj()); 67 Java_WebContentsObserverProxy_renderViewReady(env, obj.obj());
72 } 68 }
73 69
74 void WebContentsObserverAndroid::RenderProcessGone( 70 void WebContentsObserverProxy::RenderProcessGone(
75 base::TerminationStatus termination_status) { 71 base::TerminationStatus termination_status) {
76 JNIEnv* env = AttachCurrentThread(); 72 JNIEnv* env = AttachCurrentThread();
77 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); 73 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env));
78 if (obj.is_null()) 74 if (obj.is_null())
79 return; 75 return;
80 jboolean was_oom_protected = 76 jboolean was_oom_protected =
81 termination_status == base::TERMINATION_STATUS_OOM_PROTECTED; 77 termination_status == base::TERMINATION_STATUS_OOM_PROTECTED;
82 Java_WebContentsObserver_renderProcessGone( 78 Java_WebContentsObserverProxy_renderProcessGone(env, obj.obj(),
83 env, obj.obj(), was_oom_protected); 79 was_oom_protected);
84 } 80 }
85 81
86 void WebContentsObserverAndroid::DidStartLoading( 82 void WebContentsObserverProxy::DidStartLoading(
87 RenderViewHost* render_view_host) { 83 RenderViewHost* render_view_host) {
88 JNIEnv* env = AttachCurrentThread(); 84 JNIEnv* env = AttachCurrentThread();
89 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); 85 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env));
90 if (obj.is_null()) 86 if (obj.is_null())
91 return; 87 return;
92 ScopedJavaLocalRef<jstring> jstring_url(ConvertUTF8ToJavaString( 88 ScopedJavaLocalRef<jstring> jstring_url(
93 env, web_contents()->GetVisibleURL().spec())); 89 ConvertUTF8ToJavaString(env, web_contents()->GetVisibleURL().spec()));
94 Java_WebContentsObserver_didStartLoading( 90 Java_WebContentsObserverProxy_didStartLoading(env, obj.obj(),
95 env, obj.obj(), jstring_url.obj()); 91 jstring_url.obj());
96 } 92 }
97 93
98 void WebContentsObserverAndroid::DidStopLoading( 94 void WebContentsObserverProxy::DidStopLoading(
99 RenderViewHost* render_view_host) { 95 RenderViewHost* render_view_host) {
100 JNIEnv* env = AttachCurrentThread(); 96 JNIEnv* env = AttachCurrentThread();
101 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); 97 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env));
102 if (obj.is_null()) 98 if (obj.is_null())
103 return; 99 return;
104 ScopedJavaLocalRef<jstring> jstring_url(ConvertUTF8ToJavaString( 100 ScopedJavaLocalRef<jstring> jstring_url(ConvertUTF8ToJavaString(
105 env, web_contents()->GetLastCommittedURL().spec())); 101 env, web_contents()->GetLastCommittedURL().spec()));
106 Java_WebContentsObserver_didStopLoading( 102 Java_WebContentsObserverProxy_didStopLoading(env, obj.obj(),
107 env, obj.obj(), jstring_url.obj()); 103 jstring_url.obj());
108 } 104 }
109 105
110 void WebContentsObserverAndroid::DidFailProvisionalLoad( 106 void WebContentsObserverProxy::DidFailProvisionalLoad(
111 RenderFrameHost* render_frame_host, 107 RenderFrameHost* render_frame_host,
112 const GURL& validated_url, 108 const GURL& validated_url,
113 int error_code, 109 int error_code,
114 const base::string16& error_description) { 110 const base::string16& error_description) {
115 DidFailLoadInternal(true, 111 DidFailLoadInternal(true, !render_frame_host->GetParent(), error_code,
116 !render_frame_host->GetParent(), 112 error_description, validated_url);
117 error_code,
118 error_description,
119 validated_url);
120 } 113 }
121 114
122 void WebContentsObserverAndroid::DidFailLoad( 115 void WebContentsObserverProxy::DidFailLoad(
123 RenderFrameHost* render_frame_host, 116 RenderFrameHost* render_frame_host,
124 const GURL& validated_url, 117 const GURL& validated_url,
125 int error_code, 118 int error_code,
126 const base::string16& error_description) { 119 const base::string16& error_description) {
127 DidFailLoadInternal(false, 120 DidFailLoadInternal(false, !render_frame_host->GetParent(), error_code,
128 !render_frame_host->GetParent(), 121 error_description, validated_url);
129 error_code,
130 error_description,
131 validated_url);
132 } 122 }
133 123
134 void WebContentsObserverAndroid::DidNavigateMainFrame( 124 void WebContentsObserverProxy::DidNavigateMainFrame(
135 const LoadCommittedDetails& details, 125 const LoadCommittedDetails& details,
136 const FrameNavigateParams& params) { 126 const FrameNavigateParams& params) {
137 JNIEnv* env = AttachCurrentThread(); 127 JNIEnv* env = AttachCurrentThread();
138 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); 128 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env));
139 if (obj.is_null()) 129 if (obj.is_null())
140 return; 130 return;
141 ScopedJavaLocalRef<jstring> jstring_url( 131 ScopedJavaLocalRef<jstring> jstring_url(
142 ConvertUTF8ToJavaString(env, params.url.spec())); 132 ConvertUTF8ToJavaString(env, params.url.spec()));
143 ScopedJavaLocalRef<jstring> jstring_base_url( 133 ScopedJavaLocalRef<jstring> jstring_base_url(
144 ConvertUTF8ToJavaString(env, params.base_url.spec())); 134 ConvertUTF8ToJavaString(env, params.base_url.spec()));
145 135
146 // See http://crbug.com/251330 for why it's determined this way. 136 // See http://crbug.com/251330 for why it's determined this way.
147 url::Replacements<char> replacements; 137 url::Replacements<char> replacements;
148 replacements.ClearRef(); 138 replacements.ClearRef();
149 bool urls_same_ignoring_fragment = 139 bool urls_same_ignoring_fragment =
150 params.url.ReplaceComponents(replacements) == 140 params.url.ReplaceComponents(replacements) ==
151 details.previous_url.ReplaceComponents(replacements); 141 details.previous_url.ReplaceComponents(replacements);
152 142
153 // is_fragment_navigation is indicative of the intent of this variable. 143 // is_fragment_navigation is indicative of the intent of this variable.
154 // However, there isn't sufficient information here to determine whether this 144 // However, there isn't sufficient information here to determine whether this
155 // is actually a fragment navigation, or a history API navigation to a URL 145 // is actually a fragment navigation, or a history API navigation to a URL
156 // that would also be valid for a fragment navigation. 146 // that would also be valid for a fragment navigation.
157 bool is_fragment_navigation = urls_same_ignoring_fragment && 147 bool is_fragment_navigation =
148 urls_same_ignoring_fragment &&
158 (details.type == NAVIGATION_TYPE_IN_PAGE || details.is_in_page); 149 (details.type == NAVIGATION_TYPE_IN_PAGE || details.is_in_page);
159 Java_WebContentsObserver_didNavigateMainFrame( 150 Java_WebContentsObserverProxy_didNavigateMainFrame(
160 env, obj.obj(), jstring_url.obj(), jstring_base_url.obj(), 151 env, obj.obj(), jstring_url.obj(), jstring_base_url.obj(),
161 details.is_navigation_to_different_page(), is_fragment_navigation, 152 details.is_navigation_to_different_page(), is_fragment_navigation,
162 details.http_status_code); 153 details.http_status_code);
163 } 154 }
164 155
165 void WebContentsObserverAndroid::DidNavigateAnyFrame( 156 void WebContentsObserverProxy::DidNavigateAnyFrame(
166 RenderFrameHost* render_frame_host, 157 RenderFrameHost* render_frame_host,
167 const LoadCommittedDetails& details, 158 const LoadCommittedDetails& details,
168 const FrameNavigateParams& params) { 159 const FrameNavigateParams& params) {
169 JNIEnv* env = AttachCurrentThread(); 160 JNIEnv* env = AttachCurrentThread();
170 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); 161 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env));
171 if (obj.is_null()) 162 if (obj.is_null())
172 return; 163 return;
173 ScopedJavaLocalRef<jstring> jstring_url( 164 ScopedJavaLocalRef<jstring> jstring_url(
174 ConvertUTF8ToJavaString(env, params.url.spec())); 165 ConvertUTF8ToJavaString(env, params.url.spec()));
175 ScopedJavaLocalRef<jstring> jstring_base_url( 166 ScopedJavaLocalRef<jstring> jstring_base_url(
176 ConvertUTF8ToJavaString(env, params.base_url.spec())); 167 ConvertUTF8ToJavaString(env, params.base_url.spec()));
177 jboolean jboolean_is_reload = ui::PageTransitionCoreTypeIs( 168 jboolean jboolean_is_reload = ui::PageTransitionCoreTypeIs(
178 params.transition, ui::PAGE_TRANSITION_RELOAD); 169 params.transition, ui::PAGE_TRANSITION_RELOAD);
179 170
180 Java_WebContentsObserver_didNavigateAnyFrame( 171 Java_WebContentsObserverProxy_didNavigateAnyFrame(
181 env, obj.obj(), jstring_url.obj(), jstring_base_url.obj(), 172 env, obj.obj(), jstring_url.obj(), jstring_base_url.obj(),
182 jboolean_is_reload); 173 jboolean_is_reload);
183 } 174 }
184 175
185 void WebContentsObserverAndroid::DocumentAvailableInMainFrame() { 176 void WebContentsObserverProxy::DocumentAvailableInMainFrame() {
186 JNIEnv* env = AttachCurrentThread(); 177 JNIEnv* env = AttachCurrentThread();
187 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); 178 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env));
188 if (obj.is_null()) 179 if (obj.is_null())
189 return; 180 return;
190 Java_WebContentsObserver_documentAvailableInMainFrame(env, obj.obj()); 181 Java_WebContentsObserverProxy_documentAvailableInMainFrame(env, obj.obj());
191 } 182 }
192 183
193 void WebContentsObserverAndroid::DidStartProvisionalLoadForFrame( 184 void WebContentsObserverProxy::DidStartProvisionalLoadForFrame(
194 RenderFrameHost* render_frame_host, 185 RenderFrameHost* render_frame_host,
195 const GURL& validated_url, 186 const GURL& validated_url,
196 bool is_error_page, 187 bool is_error_page,
197 bool is_iframe_srcdoc) { 188 bool is_iframe_srcdoc) {
198 JNIEnv* env = AttachCurrentThread(); 189 JNIEnv* env = AttachCurrentThread();
199 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); 190 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env));
200 if (obj.is_null()) 191 if (obj.is_null())
201 return; 192 return;
202 ScopedJavaLocalRef<jstring> jstring_url( 193 ScopedJavaLocalRef<jstring> jstring_url(
203 ConvertUTF8ToJavaString(env, validated_url.spec())); 194 ConvertUTF8ToJavaString(env, validated_url.spec()));
204 // TODO(dcheng): Does Java really need the parent frame ID? It doesn't appear 195 // TODO(dcheng): Does Java really need the parent frame ID? It doesn't appear
205 // to be used at all, and it just adds complexity here. 196 // to be used at all, and it just adds complexity here.
206 Java_WebContentsObserver_didStartProvisionalLoadForFrame( 197 Java_WebContentsObserverProxy_didStartProvisionalLoadForFrame(
207 env, 198 env, obj.obj(), render_frame_host->GetRoutingID(),
208 obj.obj(),
209 render_frame_host->GetRoutingID(),
210 render_frame_host->GetParent() 199 render_frame_host->GetParent()
211 ? render_frame_host->GetParent()->GetRoutingID() 200 ? render_frame_host->GetParent()->GetRoutingID()
212 : -1, 201 : -1,
213 !render_frame_host->GetParent(), 202 !render_frame_host->GetParent(), jstring_url.obj(), is_error_page,
214 jstring_url.obj(),
215 is_error_page,
216 is_iframe_srcdoc); 203 is_iframe_srcdoc);
217 } 204 }
218 205
219 void WebContentsObserverAndroid::DidCommitProvisionalLoadForFrame( 206 void WebContentsObserverProxy::DidCommitProvisionalLoadForFrame(
220 RenderFrameHost* render_frame_host, 207 RenderFrameHost* render_frame_host,
221 const GURL& url, 208 const GURL& url,
222 ui::PageTransition transition_type) { 209 ui::PageTransition transition_type) {
223 JNIEnv* env = AttachCurrentThread(); 210 JNIEnv* env = AttachCurrentThread();
224 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); 211 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env));
225 if (obj.is_null()) 212 if (obj.is_null())
226 return; 213 return;
227 ScopedJavaLocalRef<jstring> jstring_url( 214 ScopedJavaLocalRef<jstring> jstring_url(
228 ConvertUTF8ToJavaString(env, url.spec())); 215 ConvertUTF8ToJavaString(env, url.spec()));
229 Java_WebContentsObserver_didCommitProvisionalLoadForFrame( 216 Java_WebContentsObserverProxy_didCommitProvisionalLoadForFrame(
230 env, 217 env, obj.obj(), render_frame_host->GetRoutingID(),
231 obj.obj(), 218 !render_frame_host->GetParent(), jstring_url.obj(), transition_type);
232 render_frame_host->GetRoutingID(),
233 !render_frame_host->GetParent(),
234 jstring_url.obj(),
235 transition_type);
236 } 219 }
237 220
238 void WebContentsObserverAndroid::DidFinishLoad( 221 void WebContentsObserverProxy::DidFinishLoad(RenderFrameHost* render_frame_host,
239 RenderFrameHost* render_frame_host, 222 const GURL& validated_url) {
240 const GURL& validated_url) {
241 JNIEnv* env = AttachCurrentThread(); 223 JNIEnv* env = AttachCurrentThread();
242 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); 224 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env));
243 if (obj.is_null()) 225 if (obj.is_null())
244 return; 226 return;
245 227
246 std::string url_string = validated_url.spec(); 228 std::string url_string = validated_url.spec();
247 NavigationEntry* entry = 229 NavigationEntry* entry =
248 web_contents()->GetController().GetLastCommittedEntry(); 230 web_contents()->GetController().GetLastCommittedEntry();
249 // Note that GetBaseURLForDataURL is only used by the Android WebView. 231 // Note that GetBaseURLForDataURL is only used by the Android WebView.
250 if (entry && !entry->GetBaseURLForDataURL().is_empty()) 232 if (entry && !entry->GetBaseURLForDataURL().is_empty())
251 url_string = entry->GetBaseURLForDataURL().possibly_invalid_spec(); 233 url_string = entry->GetBaseURLForDataURL().possibly_invalid_spec();
252 234
253 ScopedJavaLocalRef<jstring> jstring_url( 235 ScopedJavaLocalRef<jstring> jstring_url(
254 ConvertUTF8ToJavaString(env, url_string)); 236 ConvertUTF8ToJavaString(env, url_string));
255 Java_WebContentsObserver_didFinishLoad( 237 Java_WebContentsObserverProxy_didFinishLoad(
256 env, 238 env, obj.obj(), render_frame_host->GetRoutingID(), jstring_url.obj(),
257 obj.obj(),
258 render_frame_host->GetRoutingID(),
259 jstring_url.obj(),
260 !render_frame_host->GetParent()); 239 !render_frame_host->GetParent());
261 } 240 }
262 241
263 void WebContentsObserverAndroid::DocumentLoadedInFrame( 242 void WebContentsObserverProxy::DocumentLoadedInFrame(
264 RenderFrameHost* render_frame_host) { 243 RenderFrameHost* render_frame_host) {
265 JNIEnv* env = AttachCurrentThread(); 244 JNIEnv* env = AttachCurrentThread();
266 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); 245 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env));
267 if (obj.is_null()) 246 if (obj.is_null())
268 return; 247 return;
269 Java_WebContentsObserver_documentLoadedInFrame( 248 Java_WebContentsObserverProxy_documentLoadedInFrame(
270 env, obj.obj(), render_frame_host->GetRoutingID()); 249 env, obj.obj(), render_frame_host->GetRoutingID());
271 } 250 }
272 251
273 void WebContentsObserverAndroid::NavigationEntryCommitted( 252 void WebContentsObserverProxy::NavigationEntryCommitted(
274 const LoadCommittedDetails& load_details) { 253 const LoadCommittedDetails& load_details) {
275 JNIEnv* env = AttachCurrentThread(); 254 JNIEnv* env = AttachCurrentThread();
276 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); 255 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env));
277 if (obj.is_null()) 256 if (obj.is_null())
278 return; 257 return;
279 Java_WebContentsObserver_navigationEntryCommitted(env, obj.obj()); 258 Java_WebContentsObserverProxy_navigationEntryCommitted(env, obj.obj());
280 } 259 }
281 260
282 void WebContentsObserverAndroid::DidAttachInterstitialPage() { 261 void WebContentsObserverProxy::DidAttachInterstitialPage() {
283 JNIEnv* env = AttachCurrentThread(); 262 JNIEnv* env = AttachCurrentThread();
284 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); 263 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env));
285 if (obj.is_null()) 264 if (obj.is_null())
286 return; 265 return;
287 Java_WebContentsObserver_didAttachInterstitialPage(env, obj.obj()); 266 Java_WebContentsObserverProxy_didAttachInterstitialPage(env, obj.obj());
288 } 267 }
289 268
290 void WebContentsObserverAndroid::DidDetachInterstitialPage() { 269 void WebContentsObserverProxy::DidDetachInterstitialPage() {
291 JNIEnv* env = AttachCurrentThread(); 270 JNIEnv* env = AttachCurrentThread();
292 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); 271 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env));
293 if (obj.is_null()) 272 if (obj.is_null())
294 return; 273 return;
295 Java_WebContentsObserver_didDetachInterstitialPage(env, obj.obj()); 274 Java_WebContentsObserverProxy_didDetachInterstitialPage(env, obj.obj());
296 } 275 }
297 276
298 void WebContentsObserverAndroid::DidChangeThemeColor(SkColor color) { 277 void WebContentsObserverProxy::DidChangeThemeColor(SkColor color) {
299 JNIEnv* env = AttachCurrentThread(); 278 JNIEnv* env = AttachCurrentThread();
300 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); 279 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env));
301 if (obj.is_null()) 280 if (obj.is_null())
302 return; 281 return;
303 Java_WebContentsObserver_didChangeThemeColor(env, obj.obj(), color); 282 Java_WebContentsObserverProxy_didChangeThemeColor(env, obj.obj(), color);
304 } 283 }
305 284
306 void WebContentsObserverAndroid::DidFailLoadInternal( 285 void WebContentsObserverProxy::DidFailLoadInternal(
307 bool is_provisional_load, 286 bool is_provisional_load,
308 bool is_main_frame, 287 bool is_main_frame,
309 int error_code, 288 int error_code,
310 const base::string16& description, 289 const base::string16& description,
311 const GURL& url) { 290 const GURL& url) {
312 JNIEnv* env = AttachCurrentThread(); 291 JNIEnv* env = AttachCurrentThread();
313 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); 292 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env));
314 if (obj.is_null()) 293 if (obj.is_null())
315 return; 294 return;
316 ScopedJavaLocalRef<jstring> jstring_error_description( 295 ScopedJavaLocalRef<jstring> jstring_error_description(
317 ConvertUTF16ToJavaString(env, description)); 296 ConvertUTF16ToJavaString(env, description));
318 ScopedJavaLocalRef<jstring> jstring_url( 297 ScopedJavaLocalRef<jstring> jstring_url(
319 ConvertUTF8ToJavaString(env, url.spec())); 298 ConvertUTF8ToJavaString(env, url.spec()));
320 299
321 Java_WebContentsObserver_didFailLoad( 300 Java_WebContentsObserverProxy_didFailLoad(
322 env, obj.obj(), 301 env, obj.obj(), is_provisional_load, is_main_frame, error_code,
323 is_provisional_load,
324 is_main_frame,
325 error_code,
326 jstring_error_description.obj(), jstring_url.obj()); 302 jstring_error_description.obj(), jstring_url.obj());
327 } 303 }
328 304
329 void WebContentsObserverAndroid::DidFirstVisuallyNonEmptyPaint() { 305 void WebContentsObserverProxy::DidFirstVisuallyNonEmptyPaint() {
330 JNIEnv* env = AttachCurrentThread(); 306 JNIEnv* env = AttachCurrentThread();
331 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); 307 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env));
332 if (obj.is_null()) 308 if (obj.is_null())
333 return; 309 return;
334 Java_WebContentsObserver_didFirstVisuallyNonEmptyPaint( 310 Java_WebContentsObserverProxy_didFirstVisuallyNonEmptyPaint(env, obj.obj());
335 env, obj.obj());
336 } 311 }
337 312
338 void WebContentsObserverAndroid::DidStartNavigationToPendingEntry( 313 void WebContentsObserverProxy::DidStartNavigationToPendingEntry(
339 const GURL& url, 314 const GURL& url,
340 NavigationController::ReloadType reload_type) { 315 NavigationController::ReloadType reload_type) {
341 JNIEnv* env = AttachCurrentThread(); 316 JNIEnv* env = AttachCurrentThread();
342 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); 317 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env));
343 if (obj.is_null()) 318 if (obj.is_null())
344 return; 319 return;
345 ScopedJavaLocalRef<jstring> jstring_url( 320 ScopedJavaLocalRef<jstring> jstring_url(
346 ConvertUTF8ToJavaString(env, url.spec())); 321 ConvertUTF8ToJavaString(env, url.spec()));
347 322
348 Java_WebContentsObserver_didStartNavigationToPendingEntry(env, obj.obj(), 323 Java_WebContentsObserverProxy_didStartNavigationToPendingEntry(
349 jstring_url.obj()); 324 env, obj.obj(), jstring_url.obj());
350 } 325 }
351 326
352 bool RegisterWebContentsObserverAndroid(JNIEnv* env) { 327 bool RegisterWebContentsObserverProxy(JNIEnv* env) {
353 return RegisterNativesImpl(env); 328 return RegisterNativesImpl(env);
354 } 329 }
355 } // namespace content 330 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698