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

Side by Side Diff: android_webview/native/aw_contents.h

Issue 2863233002: [WebView] Move files from native to browser (Closed)
Patch Set: Created 3 years, 7 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
(Empty)
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
3 // found in the LICENSE file.
4
5 #ifndef ANDROID_WEBVIEW_NATIVE_AW_CONTENTS_H_
6 #define ANDROID_WEBVIEW_NATIVE_AW_CONTENTS_H_
7
8 #include <jni.h>
9
10 #include <list>
11 #include <memory>
12 #include <string>
13 #include <utility>
14
15 #include "android_webview/browser/aw_browser_permission_request_delegate.h"
16 #include "android_webview/browser/aw_render_process_gone_delegate.h"
17 #include "android_webview/browser/aw_safe_browsing_ui_manager.h"
18 #include "android_webview/browser/browser_view_renderer.h"
19 #include "android_webview/browser/browser_view_renderer_client.h"
20 #include "android_webview/browser/find_helper.h"
21 #include "android_webview/browser/gl_view_renderer_manager.h"
22 #include "android_webview/browser/icon_helper.h"
23 #include "android_webview/browser/render_thread_manager.h"
24 #include "android_webview/browser/render_thread_manager_client.h"
25 #include "android_webview/browser/renderer_host/aw_render_view_host_ext.h"
26 #include "android_webview/native/aw_renderer_priority_manager.h"
27 #include "android_webview/native/permission/permission_request_handler_client.h"
28 #include "base/android/jni_weak_ref.h"
29 #include "base/android/scoped_java_ref.h"
30 #include "base/callback_forward.h"
31 #include "base/macros.h"
32 #include "content/public/browser/render_process_host_observer.h"
33 #include "content/public/browser/web_contents_observer.h"
34
35 class SkBitmap;
36 class TabContents;
37
38 namespace content {
39 class WebContents;
40 }
41
42 namespace android_webview {
43
44 class AwContentsContainer;
45 class AwContentsClientBridge;
46 class AwGLFunctor;
47 class AwPdfExporter;
48 class AwWebContentsDelegate;
49 class PermissionRequestHandler;
50
51 // Native side of java-class of same name.
52 // Provides the ownership of and access to browser components required for
53 // WebView functionality; analogous to chrome's TabContents, but with a
54 // level of indirection provided by the AwContentsContainer abstraction.
55 //
56 // Object lifetime:
57 // For most purposes the java and native objects can be considered to have
58 // 1:1 lifetime and relationship. The exception is the java instance that
59 // hosts a popup will be rebound to a second native instance (carrying the
60 // popup content) and discard the 'default' native instance it made on
61 // construction. A native instance is only bound to at most one Java peer over
62 // its entire lifetime - see Init() and SetPendingWebContentsForPopup() for the
63 // construction points, and SetJavaPeers() where these paths join.
64 class AwContents : public FindHelper::Listener,
65 public IconHelper::Listener,
66 public AwRenderViewHostExtClient,
67 public BrowserViewRendererClient,
68 public PermissionRequestHandlerClient,
69 public AwBrowserPermissionRequestDelegate,
70 public AwRenderProcessGoneDelegate,
71 public content::WebContentsObserver,
72 public content::RenderProcessHostObserver,
73 public AwSafeBrowsingUIManager::UIManagerClient {
74 public:
75 // Returns the AwContents instance associated with |web_contents|, or NULL.
76 static AwContents* FromWebContents(content::WebContents* web_contents);
77
78 // Returns the AwContents instance associated with with the given
79 // render_process_id and render_view_id, or NULL.
80 static AwContents* FromID(int render_process_id, int render_view_id);
81
82 static std::string GetLocale();
83
84 static std::string GetLocaleList();
85
86 AwContents(std::unique_ptr<content::WebContents> web_contents);
87 ~AwContents() override;
88
89 AwRenderViewHostExt* render_view_host_ext() {
90 return render_view_host_ext_.get();
91 }
92
93 // |handler| is an instance of
94 // org.chromium.android_webview.AwHttpAuthHandler.
95 bool OnReceivedHttpAuthRequest(const base::android::JavaRef<jobject>& handler,
96 const std::string& host,
97 const std::string& realm);
98
99 void SetOffscreenPreRaster(bool enabled);
100
101 // Methods called from Java.
102 void SetJavaPeers(
103 JNIEnv* env,
104 const base::android::JavaParamRef<jobject>& obj,
105 const base::android::JavaParamRef<jobject>& aw_contents,
106 const base::android::JavaParamRef<jobject>& web_contents_delegate,
107 const base::android::JavaParamRef<jobject>& contents_client_bridge,
108 const base::android::JavaParamRef<jobject>& io_thread_client,
109 const base::android::JavaParamRef<jobject>&
110 intercept_navigation_delegate);
111 base::android::ScopedJavaLocalRef<jobject> GetWebContents(
112 JNIEnv* env,
113 const base::android::JavaParamRef<jobject>& obj);
114 void SetAwGLFunctor(JNIEnv* env,
115 const base::android::JavaParamRef<jobject>& obj,
116 jlong gl_functor);
117
118 void Destroy(JNIEnv* env, const base::android::JavaParamRef<jobject>& obj);
119 void DocumentHasImages(JNIEnv* env,
120 const base::android::JavaParamRef<jobject>& obj,
121 const base::android::JavaParamRef<jobject>& message);
122 void GenerateMHTML(JNIEnv* env,
123 const base::android::JavaParamRef<jobject>& obj,
124 const base::android::JavaParamRef<jstring>& jpath,
125 const base::android::JavaParamRef<jobject>& callback);
126 void CreatePdfExporter(
127 JNIEnv* env,
128 const base::android::JavaParamRef<jobject>& obj,
129 const base::android::JavaParamRef<jobject>& pdfExporter);
130 void AddVisitedLinks(
131 JNIEnv* env,
132 const base::android::JavaParamRef<jobject>& obj,
133 const base::android::JavaParamRef<jobjectArray>& jvisited_links);
134 base::android::ScopedJavaLocalRef<jbyteArray> GetCertificate(
135 JNIEnv* env,
136 const base::android::JavaParamRef<jobject>& obj);
137 void RequestNewHitTestDataAt(JNIEnv* env,
138 const base::android::JavaParamRef<jobject>& obj,
139 jfloat x,
140 jfloat y,
141 jfloat touch_major);
142 void UpdateLastHitTestData(JNIEnv* env,
143 const base::android::JavaParamRef<jobject>& obj);
144 void OnSizeChanged(JNIEnv* env,
145 const base::android::JavaParamRef<jobject>& obj,
146 int w,
147 int h,
148 int ow,
149 int oh);
150 void SetViewVisibility(JNIEnv* env,
151 const base::android::JavaParamRef<jobject>& obj,
152 bool visible);
153 void SetWindowVisibility(JNIEnv* env,
154 const base::android::JavaParamRef<jobject>& obj,
155 bool visible);
156 void SetIsPaused(JNIEnv* env,
157 const base::android::JavaParamRef<jobject>& obj,
158 bool paused);
159 void OnAttachedToWindow(JNIEnv* env,
160 const base::android::JavaParamRef<jobject>& obj,
161 int w,
162 int h);
163 void OnDetachedFromWindow(JNIEnv* env,
164 const base::android::JavaParamRef<jobject>& obj);
165 bool IsVisible(JNIEnv* env, const base::android::JavaParamRef<jobject>& obj);
166 base::android::ScopedJavaLocalRef<jbyteArray> GetOpaqueState(
167 JNIEnv* env,
168 const base::android::JavaParamRef<jobject>& obj);
169 jboolean RestoreFromOpaqueState(
170 JNIEnv* env,
171 const base::android::JavaParamRef<jobject>& obj,
172 const base::android::JavaParamRef<jbyteArray>& state);
173 void FocusFirstNode(JNIEnv* env,
174 const base::android::JavaParamRef<jobject>& obj);
175 void SetBackgroundColor(JNIEnv* env,
176 const base::android::JavaParamRef<jobject>& obj,
177 jint color);
178 void ZoomBy(JNIEnv* env,
179 const base::android::JavaParamRef<jobject>& obj,
180 jfloat delta);
181 void OnComputeScroll(JNIEnv* env,
182 const base::android::JavaParamRef<jobject>& obj,
183 jlong animation_time_millis);
184 bool OnDraw(JNIEnv* env,
185 const base::android::JavaParamRef<jobject>& obj,
186 const base::android::JavaParamRef<jobject>& canvas,
187 jboolean is_hardware_accelerated,
188 jint scroll_x,
189 jint scroll_y,
190 jint visible_left,
191 jint visible_top,
192 jint visible_right,
193 jint visible_bottom);
194 jlong CapturePicture(JNIEnv* env,
195 const base::android::JavaParamRef<jobject>& obj,
196 int width,
197 int height);
198 void EnableOnNewPicture(JNIEnv* env,
199 const base::android::JavaParamRef<jobject>& obj,
200 jboolean enabled);
201 void InsertVisualStateCallback(
202 JNIEnv* env,
203 const base::android::JavaParamRef<jobject>& obj,
204 jlong request_id,
205 const base::android::JavaParamRef<jobject>& callback);
206 void ClearView(JNIEnv* env, const base::android::JavaParamRef<jobject>& obj);
207 void SetExtraHeadersForUrl(
208 JNIEnv* env,
209 const base::android::JavaParamRef<jobject>& obj,
210 const base::android::JavaParamRef<jstring>& url,
211 const base::android::JavaParamRef<jstring>& extra_headers);
212
213 void InvokeGeolocationCallback(
214 JNIEnv* env,
215 const base::android::JavaParamRef<jobject>& obj,
216 jboolean value,
217 const base::android::JavaParamRef<jstring>& origin);
218
219 AwRendererPriorityManager::RendererPriority GetCurrentRendererPriority();
220 jint GetRendererCurrentPriority(
221 JNIEnv* env,
222 const base::android::JavaParamRef<jobject>& obj);
223 jint GetRendererRequestedPriority(
224 JNIEnv* env,
225 const base::android::JavaParamRef<jobject>& obj);
226 jboolean GetRendererPriorityWaivedWhenNotVisible(
227 JNIEnv* env,
228 const base::android::JavaParamRef<jobject>& obj);
229 void SetRendererPriorityPolicy(
230 JNIEnv* env,
231 const base::android::JavaParamRef<jobject>& obj,
232 jint rendererRequestedPriority,
233 jboolean waivedhenNotVisible);
234
235 // PermissionRequestHandlerClient implementation.
236 void OnPermissionRequest(base::android::ScopedJavaLocalRef<jobject> j_request,
237 AwPermissionRequest* request) override;
238 void OnPermissionRequestCanceled(AwPermissionRequest* request) override;
239
240 PermissionRequestHandler* GetPermissionRequestHandler() {
241 return permission_request_handler_.get();
242 }
243
244 void PreauthorizePermission(
245 JNIEnv* env,
246 const base::android::JavaParamRef<jobject>& obj,
247 const base::android::JavaParamRef<jstring>& origin,
248 jlong resources);
249
250 // AwBrowserPermissionRequestDelegate implementation.
251 void RequestProtectedMediaIdentifierPermission(
252 const GURL& origin,
253 const base::Callback<void(bool)>& callback) override;
254 void CancelProtectedMediaIdentifierPermissionRequests(
255 const GURL& origin) override;
256 void RequestGeolocationPermission(
257 const GURL& origin,
258 const base::Callback<void(bool)>& callback) override;
259 void CancelGeolocationPermissionRequests(const GURL& origin) override;
260 void RequestMIDISysexPermission(
261 const GURL& origin,
262 const base::Callback<void(bool)>& callback) override;
263 void CancelMIDISysexPermissionRequests(const GURL& origin) override;
264
265 // Find-in-page API and related methods.
266 void FindAllAsync(JNIEnv* env,
267 const base::android::JavaParamRef<jobject>& obj,
268 const base::android::JavaParamRef<jstring>& search_string);
269 void FindNext(JNIEnv* env,
270 const base::android::JavaParamRef<jobject>& obj,
271 jboolean forward);
272 void ClearMatches(JNIEnv* env,
273 const base::android::JavaParamRef<jobject>& obj);
274 FindHelper* GetFindHelper();
275
276 // Per WebView Cookie Policy
277 bool AllowThirdPartyCookies();
278
279 // FindHelper::Listener implementation.
280 void OnFindResultReceived(int active_ordinal,
281 int match_count,
282 bool finished) override;
283 // IconHelper::Listener implementation.
284 bool ShouldDownloadFavicon(const GURL& icon_url) override;
285 void OnReceivedIcon(const GURL& icon_url, const SkBitmap& bitmap) override;
286 void OnReceivedTouchIconUrl(const std::string& url,
287 const bool precomposed) override;
288
289 // AwRenderViewHostExtClient implementation.
290 void OnWebLayoutPageScaleFactorChanged(float page_scale_factor) override;
291 void OnWebLayoutContentsSizeChanged(const gfx::Size& contents_size) override;
292
293 // BrowserViewRendererClient implementation.
294 void PostInvalidate() override;
295 void OnNewPicture() override;
296 gfx::Point GetLocationOnScreen() override;
297 void ScrollContainerViewTo(const gfx::Vector2d& new_value) override;
298 void UpdateScrollState(const gfx::Vector2d& max_scroll_offset,
299 const gfx::SizeF& contents_size_dip,
300 float page_scale_factor,
301 float min_page_scale_factor,
302 float max_page_scale_factor) override;
303 void DidOverscroll(const gfx::Vector2d& overscroll_delta,
304 const gfx::Vector2dF& overscroll_velocity) override;
305 ui::TouchHandleDrawable* CreateDrawable() override;
306
307 void ClearCache(JNIEnv* env,
308 const base::android::JavaParamRef<jobject>& obj,
309 jboolean include_disk_files);
310 void KillRenderProcess(JNIEnv* env,
311 const base::android::JavaParamRef<jobject>& obj);
312 void SetPendingWebContentsForPopup(
313 std::unique_ptr<content::WebContents> pending);
314 jlong ReleasePopupAwContents(JNIEnv* env,
315 const base::android::JavaParamRef<jobject>& obj);
316
317 void ScrollTo(JNIEnv* env,
318 const base::android::JavaParamRef<jobject>& obj,
319 jint x,
320 jint y);
321 void SmoothScroll(JNIEnv* env,
322 const base::android::JavaParamRef<jobject>& obj,
323 jint target_x,
324 jint target_y,
325 jlong duration_ms);
326 void SetDipScale(JNIEnv* env,
327 const base::android::JavaParamRef<jobject>& obj,
328 jfloat dip_scale);
329 void SetSaveFormData(bool enabled);
330
331 // Sets the java client
332 void SetAwAutofillClient(const base::android::JavaRef<jobject>& client);
333
334 void SetJsOnlineProperty(JNIEnv* env,
335 const base::android::JavaParamRef<jobject>& obj,
336 jboolean network_up);
337 void TrimMemory(JNIEnv* env,
338 const base::android::JavaParamRef<jobject>& obj,
339 jint level,
340 jboolean visible);
341 void PostMessageToFrame(
342 JNIEnv* env,
343 const base::android::JavaParamRef<jobject>& obj,
344 const base::android::JavaParamRef<jstring>& frame_id,
345 const base::android::JavaParamRef<jstring>& message,
346 const base::android::JavaParamRef<jstring>& target_origin,
347 const base::android::JavaParamRef<jobjectArray>& ports);
348
349 void GrantFileSchemeAccesstoChildProcess(
350 JNIEnv* env,
351 const base::android::JavaParamRef<jobject>& obj);
352
353 void ResumeLoadingCreatedPopupWebContents(
354 JNIEnv* env,
355 const base::android::JavaParamRef<jobject>& obj);
356
357 // content::WebContentsObserver overrides
358 void RenderViewHostChanged(content::RenderViewHost* old_host,
359 content::RenderViewHost* new_host) override;
360 void DidAttachInterstitialPage() override;
361 void DidDetachInterstitialPage() override;
362
363 // content::RenderProcessHostObserver overrides
364 void RenderProcessReady(content::RenderProcessHost* host) override;
365
366 // AwSafeBrowsingUIManager::UIManagerClient implementation
367 bool CanShowBigInterstitial() override;
368
369 void CallProceedOnInterstitialForTesting(
370 JNIEnv* env,
371 const base::android::JavaParamRef<jobject>& obj);
372 void CallDontProceedOnInterstitialForTesting(
373 JNIEnv* env,
374 const base::android::JavaParamRef<jobject>& obj);
375
376 // AwRenderProcessGoneDelegate overrides
377 void OnRenderProcessGone(int child_process_id) override;
378 bool OnRenderProcessGoneDetail(int child_process_id, bool crashed) override;
379
380 private:
381 void InitAutofillIfNecessary(bool enabled);
382
383 // Geolocation API support
384 void ShowGeolocationPrompt(const GURL& origin, base::Callback<void(bool)>);
385 void HideGeolocationPrompt(const GURL& origin);
386
387 void SetDipScaleInternal(float dip_scale);
388
389 void SetAwGLFunctor(AwGLFunctor* functor);
390
391 AwRendererPriorityManager* GetAwRendererPriorityManager();
392 AwRendererPriorityManager::RendererPriority GetComputedRendererPriority();
393 void UpdateRendererPriority(
394 AwRendererPriorityManager::RendererPriority base_priority);
395 void UpdateRendererPriority();
396
397 JavaObjectWeakGlobalRef java_ref_;
398 AwGLFunctor* functor_;
399 BrowserViewRenderer browser_view_renderer_; // Must outlive |web_contents_|.
400 std::unique_ptr<content::WebContents> web_contents_;
401 std::unique_ptr<AwWebContentsDelegate> web_contents_delegate_;
402 std::unique_ptr<AwContentsClientBridge> contents_client_bridge_;
403 std::unique_ptr<AwRenderViewHostExt> render_view_host_ext_;
404 std::unique_ptr<FindHelper> find_helper_;
405 std::unique_ptr<IconHelper> icon_helper_;
406 std::unique_ptr<AwContents> pending_contents_;
407 std::unique_ptr<AwPdfExporter> pdf_exporter_;
408 std::unique_ptr<PermissionRequestHandler> permission_request_handler_;
409
410 // GURL is supplied by the content layer as requesting frame.
411 // Callback is supplied by the content layer, and is invoked with the result
412 // from the permission prompt.
413 typedef std::pair<const GURL, base::Callback<void(bool)>> OriginCallback;
414 // The first element in the list is always the currently pending request.
415 std::list<OriginCallback> pending_geolocation_prompts_;
416
417 GLViewRendererManager::Key renderer_manager_key_;
418
419 AwRendererPriorityManager::RendererPriority renderer_requested_priority_;
420 bool renderer_priority_waived_when_not_visible_;
421
422 DISALLOW_COPY_AND_ASSIGN(AwContents);
423 };
424
425 bool RegisterAwContents(JNIEnv* env);
426
427 } // namespace android_webview
428
429 #endif // ANDROID_WEBVIEW_NATIVE_AW_CONTENTS_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698