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_BROWSER_RENDER_HOST_RENDER_VIEW_HOST_EXT_H_ 6 #define ANDROID_WEBVIEW_BROWSER_RENDER_HOST_RENDER_VIEW_HOST_EXT_H_ 7 8 #include "content/public/browser/web_contents_observer.h" 9 10 #include "android_webview/common/aw_hit_test_data.h" 11 #include "base/callback_forward.h" 12 #include "base/threading/non_thread_safe.h" 13 #include "third_party/skia/include/core/SkColor.h" 14 #include "ui/gfx/size.h" 15 16 class GURL; 17 18 namespace content { 19 struct FrameNavigateParams; 20 struct LoadCommittedDetails; 21 } // namespace content 22 23 namespace android_webview { 24 25 class AwRenderViewHostExtClient { 26 public: 27 // Called when the RenderView page scale changes. 28 virtual void OnWebLayoutPageScaleFactorChanged(float page_scale_factor) = 0; 29 virtual void OnWebLayoutContentsSizeChanged( 30 const gfx::Size& contents_size) = 0; 31 32 protected: 33 virtual ~AwRenderViewHostExtClient() {} 34 }; 35 36 // Provides RenderViewHost wrapper functionality for sending WebView-specific 37 // IPC messages to the renderer and from there to WebKit. 38 class AwRenderViewHostExt : public content::WebContentsObserver, 39 public base::NonThreadSafe { 40 public: 41 42 // To send receive messages to a RenderView we take the WebContents instance, 43 // as it internally handles RenderViewHost instances changing underneath us. 44 AwRenderViewHostExt( 45 AwRenderViewHostExtClient* client, content::WebContents* contents); 46 virtual ~AwRenderViewHostExt(); 47 48 // |result| will be invoked with the outcome of the request. 49 typedef base::Callback<void(bool)> DocumentHasImagesResult; 50 void DocumentHasImages(DocumentHasImagesResult result); 51 52 // Clear all WebCore memory cache (not only for this view). 53 void ClearCache(); 54 55 // Do a hit test at the view port coordinates and asynchronously update 56 // |last_hit_test_data_|. |view_x| and |view_y| are in density independent 57 // pixels used by blink::WebView. 58 void RequestNewHitTestDataAt(int view_x, int view_y); 59 60 // Optimization to avoid unnecessary Java object creation on hit test. 61 bool HasNewHitTestData() const; 62 void MarkHitTestDataRead(); 63 64 // Return |last_hit_test_data_|. Note that this is unavoidably racy; 65 // the corresponding public WebView API is as well. 66 const AwHitTestData& GetLastHitTestData() const; 67 68 // Sets the zoom factor for text only. Used in layout modes other than 69 // Text Autosizing. 70 void SetTextZoomFactor(float factor); 71 72 void SetFixedLayoutSize(const gfx::Size& size); 73 74 void ResetScrollAndScaleState(); 75 76 // Sets the initial page scale. This overrides initial scale set by 77 // the meta viewport tag. 78 void SetInitialPageScale(double page_scale_factor); 79 void SetBackgroundColor(SkColor c); 80 void SetJsOnlineProperty(bool network_up); 81 82 private: 83 // content::WebContentsObserver implementation. 84 virtual void RenderViewCreated(content::RenderViewHost* view_host) OVERRIDE; 85 virtual void RenderProcessGone(base::TerminationStatus status) OVERRIDE; 86 virtual void DidNavigateAnyFrame( 87 const content::LoadCommittedDetails& details, 88 const content::FrameNavigateParams& params) OVERRIDE; 89 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; 90 91 void OnDocumentHasImagesResponse(int msg_id, bool has_images); 92 void OnUpdateHitTestData(const AwHitTestData& hit_test_data); 93 void OnPageScaleFactorChanged(float page_scale_factor); 94 void OnContentsSizeChanged(const gfx::Size& contents_size); 95 96 bool IsRenderViewReady() const; 97 98 AwRenderViewHostExtClient* client_; 99 100 SkColor background_color_; 101 102 std::map<int, DocumentHasImagesResult> pending_document_has_images_requests_; 103 104 // Master copy of hit test data on the browser side. This is updated 105 // as a result of DoHitTest called explicitly or when the FocusedNodeChanged 106 // is called in AwRenderViewExt. 107 AwHitTestData last_hit_test_data_; 108 109 bool has_new_hit_test_data_; 110 111 DISALLOW_COPY_AND_ASSIGN(AwRenderViewHostExt); 112 }; 113 114 } // namespace android_webview 115 116 #endif // ANDROID_WEBVIEW_BROWSER_RENDER_HOST_RENDER_VIEW_HOST_EXT_H_ 117