OLD | NEW |
---|---|
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 |
OLD | NEW |