| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 #ifndef EXTENSIONS_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_GUEST_H_ | 5 #ifndef EXTENSIONS_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_GUEST_H_ |
| 6 #define EXTENSIONS_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_GUEST_H_ | 6 #define EXTENSIONS_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_GUEST_H_ |
| 7 | 7 |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/observer_list.h" | 10 #include "base/observer_list.h" |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 107 // Sets the transparency of the guest. | 107 // Sets the transparency of the guest. |
| 108 void SetAllowTransparency(bool allow); | 108 void SetAllowTransparency(bool allow); |
| 109 bool allow_transparency() const { return allow_transparency_; } | 109 bool allow_transparency() const { return allow_transparency_; } |
| 110 | 110 |
| 111 // Loads a data URL with a specified base URL and virtual URL. | 111 // Loads a data URL with a specified base URL and virtual URL. |
| 112 bool LoadDataWithBaseURL(const std::string& data_url, | 112 bool LoadDataWithBaseURL(const std::string& data_url, |
| 113 const std::string& base_url, | 113 const std::string& base_url, |
| 114 const std::string& virtual_url, | 114 const std::string& virtual_url, |
| 115 std::string* error); | 115 std::string* error); |
| 116 | 116 |
| 117 // GuestViewBase implementation. | |
| 118 bool CanRunInDetachedState() const override; | |
| 119 void CreateWebContents(const base::DictionaryValue& create_params, | |
| 120 const WebContentsCreatedCallback& callback) override; | |
| 121 void DidAttachToEmbedder() override; | |
| 122 void DidDropLink(const GURL& url) override; | |
| 123 void DidInitialize(const base::DictionaryValue& create_params) override; | |
| 124 void FindReply(content::WebContents* source, | |
| 125 int request_id, | |
| 126 int number_of_matches, | |
| 127 const gfx::Rect& selection_rect, | |
| 128 int active_match_ordinal, | |
| 129 bool final_update) override; | |
| 130 void GuestViewDidStopLoading() override; | |
| 131 void EmbedderFullscreenToggled(bool entered_fullscreen) override; | |
| 132 const char* GetAPINamespace() const override; | |
| 133 int GetTaskPrefix() const override; | |
| 134 void GuestDestroyed() override; | |
| 135 void GuestReady() override; | |
| 136 void GuestSizeChangedDueToAutoSize(const gfx::Size& old_size, | |
| 137 const gfx::Size& new_size) override; | |
| 138 void GuestZoomChanged(double old_zoom_level, double new_zoom_level) override; | |
| 139 bool IsAutoSizeSupported() const override; | |
| 140 void SignalWhenReady(const base::Closure& callback) override; | |
| 141 bool ShouldHandleFindRequestsForEmbedder() const override; | |
| 142 void WillAttachToEmbedder() override; | |
| 143 void WillDestroy() override; | |
| 144 | |
| 145 // WebContentsDelegate implementation. | |
| 146 bool AddMessageToConsole(content::WebContents* source, | |
| 147 int32 level, | |
| 148 const base::string16& message, | |
| 149 int32 line_no, | |
| 150 const base::string16& source_id) override; | |
| 151 void LoadProgressChanged(content::WebContents* source, | |
| 152 double progress) override; | |
| 153 void CloseContents(content::WebContents* source) override; | |
| 154 bool HandleContextMenu(const content::ContextMenuParams& params) override; | |
| 155 void HandleKeyboardEvent( | |
| 156 content::WebContents* source, | |
| 157 const content::NativeWebKeyboardEvent& event) override; | |
| 158 bool PreHandleGestureEvent(content::WebContents* source, | |
| 159 const blink::WebGestureEvent& event) override; | |
| 160 void RendererResponsive(content::WebContents* source) override; | |
| 161 void RendererUnresponsive(content::WebContents* source) override; | |
| 162 void RequestMediaAccessPermission( | |
| 163 content::WebContents* source, | |
| 164 const content::MediaStreamRequest& request, | |
| 165 const content::MediaResponseCallback& callback) override; | |
| 166 void RequestPointerLockPermission( | |
| 167 bool user_gesture, | |
| 168 bool last_unlocked_by_target, | |
| 169 const base::Callback<void(bool)>& callback) override; | |
| 170 bool CheckMediaAccessPermission(content::WebContents* source, | |
| 171 const GURL& security_origin, | |
| 172 content::MediaStreamType type) override; | |
| 173 void CanDownload(const GURL& url, | |
| 174 const std::string& request_method, | |
| 175 const base::Callback<void(bool)>& callback) override; | |
| 176 content::JavaScriptDialogManager* GetJavaScriptDialogManager( | |
| 177 content::WebContents* source) override; | |
| 178 void AddNewContents(content::WebContents* source, | |
| 179 content::WebContents* new_contents, | |
| 180 WindowOpenDisposition disposition, | |
| 181 const gfx::Rect& initial_rect, | |
| 182 bool user_gesture, | |
| 183 bool* was_blocked) override; | |
| 184 content::WebContents* OpenURLFromTab( | |
| 185 content::WebContents* source, | |
| 186 const content::OpenURLParams& params) override; | |
| 187 void WebContentsCreated(content::WebContents* source_contents, | |
| 188 int opener_render_frame_id, | |
| 189 const std::string& frame_name, | |
| 190 const GURL& target_url, | |
| 191 content::WebContents* new_contents) override; | |
| 192 void EnterFullscreenModeForTab(content::WebContents* web_contents, | |
| 193 const GURL& origin) override; | |
| 194 void ExitFullscreenModeForTab(content::WebContents* web_contents) override; | |
| 195 bool IsFullscreenForTabOrPending( | |
| 196 const content::WebContents* web_contents) const override; | |
| 197 | |
| 198 // NotificationObserver implementation. | |
| 199 void Observe(int type, | |
| 200 const content::NotificationSource& source, | |
| 201 const content::NotificationDetails& details) override; | |
| 202 | |
| 203 // Begin or continue a find request. | 117 // Begin or continue a find request. |
| 204 void StartFindInternal( | 118 void StartFind(const base::string16& search_text, |
| 205 const base::string16& search_text, | 119 const blink::WebFindOptions& options, |
| 206 const blink::WebFindOptions& options, | 120 scoped_refptr<WebViewInternalFindFunction> find_function); |
| 207 scoped_refptr<WebViewInternalFindFunction> find_function); | |
| 208 | 121 |
| 209 // Conclude a find request to clear highlighting. | 122 // Conclude a find request to clear highlighting. |
| 210 void StopFindingInternal(content::StopFindAction); | 123 void StopFinding(content::StopFindAction); |
| 211 | 124 |
| 212 // If possible, navigate the guest to |relative_index| entries away from the | 125 // If possible, navigate the guest to |relative_index| entries away from the |
| 213 // current navigation entry. Returns true on success. | 126 // current navigation entry. Returns true on success. |
| 214 bool Go(int relative_index); | 127 bool Go(int relative_index); |
| 215 | 128 |
| 216 // Reload the guest. | 129 // Reload the guest. |
| 217 void Reload(); | 130 void Reload(); |
| 218 | 131 |
| 219 using PermissionResponseCallback = | |
| 220 base::Callback<void(bool /* allow */, | |
| 221 const std::string& /* user_input */)>; | |
| 222 int RequestPermission( | |
| 223 WebViewPermissionType permission_type, | |
| 224 const base::DictionaryValue& request_info, | |
| 225 const PermissionResponseCallback& callback, | |
| 226 bool allowed_by_default); | |
| 227 | |
| 228 // Requests Geolocation Permission from the embedder. | |
| 229 void RequestGeolocationPermission(int bridge_id, | |
| 230 const GURL& requesting_frame, | |
| 231 bool user_gesture, | |
| 232 const base::Callback<void(bool)>& callback); | |
| 233 void CancelGeolocationPermissionRequest(int bridge_id); | |
| 234 | |
| 235 // Called when file system access is requested by the guest content using the | |
| 236 // HTML5 file system API in main thread, or a worker thread. | |
| 237 // The request is plumbed through the <webview> permission request API. The | |
| 238 // request will be: | |
| 239 // - Allowed if the embedder explicitly allowed it. | |
| 240 // - Denied if the embedder explicitly denied. | |
| 241 // - Determined by the guest's content settings if the embedder does not | |
| 242 // perform an explicit action. | |
| 243 void RequestFileSystemPermission(const GURL& url, | |
| 244 bool allowed_by_default, | |
| 245 const base::Callback<void(bool)>& callback); | |
| 246 | |
| 247 // Overrides the user agent for this guest. | 132 // Overrides the user agent for this guest. |
| 248 // This affects subsequent guest navigations. | 133 // This affects subsequent guest navigations. |
| 249 void SetUserAgentOverride(const std::string& user_agent_override); | 134 void SetUserAgentOverride(const std::string& user_agent_override); |
| 250 | 135 |
| 251 // Stop loading the guest. | 136 // Stop loading the guest. |
| 252 void Stop(); | 137 void Stop(); |
| 253 | 138 |
| 254 // Kill the guest process. | 139 // Kill the guest process. |
| 255 void Terminate(); | 140 void Terminate(); |
| 256 | 141 |
| 257 // Clears data in the storage partition of this guest. | 142 // Clears data in the storage partition of this guest. |
| 258 // | 143 // |
| 259 // Partition data that are newer than |removal_since| will be removed. | 144 // Partition data that are newer than |removal_since| will be removed. |
| 260 // |removal_mask| corresponds to bitmask in StoragePartition::RemoveDataMask. | 145 // |removal_mask| corresponds to bitmask in StoragePartition::RemoveDataMask. |
| 261 bool ClearData(const base::Time remove_since, | 146 bool ClearData(const base::Time remove_since, |
| 262 uint32 removal_mask, | 147 uint32 removal_mask, |
| 263 const base::Closure& callback); | 148 const base::Closure& callback); |
| 264 | 149 |
| 265 ScriptExecutor* script_executor() { return script_executor_.get(); } | 150 ScriptExecutor* script_executor() { return script_executor_.get(); } |
| 266 | 151 |
| 267 scoped_ptr<WebViewGuestDelegate> SetDelegateForTesting( | |
| 268 scoped_ptr<WebViewGuestDelegate> delegate) { | |
| 269 web_view_guest_delegate_.swap(delegate); | |
| 270 return delegate.Pass(); | |
| 271 } | |
| 272 | |
| 273 private: | 152 private: |
| 274 friend class WebViewPermissionHelper; | 153 friend class WebViewPermissionHelper; |
| 275 | 154 |
| 276 explicit WebViewGuest(content::WebContents* owner_web_contents); | 155 explicit WebViewGuest(content::WebContents* owner_web_contents); |
| 277 | 156 |
| 278 ~WebViewGuest() override; | 157 ~WebViewGuest() override; |
| 279 | 158 |
| 280 void ClearDataInternal(const base::Time remove_since, | 159 void ClearDataInternal(const base::Time remove_since, |
| 281 uint32 removal_mask, | 160 uint32 removal_mask, |
| 282 const base::Closure& callback); | 161 const base::Closure& callback); |
| 283 | 162 |
| 284 void OnWebViewNewWindowResponse(int new_window_instance_id, | 163 void OnWebViewNewWindowResponse(int new_window_instance_id, |
| 285 bool allow, | 164 bool allow, |
| 286 const std::string& user_input); | 165 const std::string& user_input); |
| 287 | 166 |
| 288 void OnFullscreenPermissionDecided(bool allowed, | 167 void OnFullscreenPermissionDecided(bool allowed, |
| 289 const std::string& user_input); | 168 const std::string& user_input); |
| 290 bool GuestMadeEmbedderFullscreen() const; | 169 bool GuestMadeEmbedderFullscreen() const; |
| 291 void SetFullscreenState(bool is_fullscreen); | 170 void SetFullscreenState(bool is_fullscreen); |
| 292 | 171 |
| 172 // GuestViewBase implementation. |
| 173 bool CanRunInDetachedState() const final; |
| 174 void CreateWebContents(const base::DictionaryValue& create_params, |
| 175 const WebContentsCreatedCallback& callback) final; |
| 176 void DidAttachToEmbedder() final; |
| 177 void DidDropLink(const GURL& url) final; |
| 178 void DidInitialize(const base::DictionaryValue& create_params) final; |
| 179 void EmbedderFullscreenToggled(bool entered_fullscreen) final; |
| 180 void FindReply(content::WebContents* source, |
| 181 int request_id, |
| 182 int number_of_matches, |
| 183 const gfx::Rect& selection_rect, |
| 184 int active_match_ordinal, |
| 185 bool final_update) final; |
| 186 const char* GetAPINamespace() const final; |
| 187 int GetTaskPrefix() const final; |
| 188 void GuestDestroyed() final; |
| 189 void GuestReady() final; |
| 190 void GuestSizeChangedDueToAutoSize(const gfx::Size& old_size, |
| 191 const gfx::Size& new_size) final; |
| 192 void GuestViewDidStopLoading() final; |
| 193 void GuestZoomChanged(double old_zoom_level, double new_zoom_level) final; |
| 194 bool IsAutoSizeSupported() const final; |
| 195 void SetContextMenuPosition(const gfx::Point& position) final; |
| 196 void SignalWhenReady(const base::Closure& callback) final; |
| 197 bool ShouldHandleFindRequestsForEmbedder() const final; |
| 198 void WillAttachToEmbedder() final; |
| 199 void WillDestroy() final; |
| 200 |
| 201 // NotificationObserver implementation. |
| 202 void Observe(int type, |
| 203 const content::NotificationSource& source, |
| 204 const content::NotificationDetails& details) final; |
| 205 |
| 206 // WebContentsDelegate implementation. |
| 207 bool AddMessageToConsole(content::WebContents* source, |
| 208 int32 level, |
| 209 const base::string16& message, |
| 210 int32 line_no, |
| 211 const base::string16& source_id) final; |
| 212 void CloseContents(content::WebContents* source) final; |
| 213 bool HandleContextMenu(const content::ContextMenuParams& params) final; |
| 214 void HandleKeyboardEvent(content::WebContents* source, |
| 215 const content::NativeWebKeyboardEvent& event) final; |
| 216 void LoadProgressChanged(content::WebContents* source, double progress) final; |
| 217 bool PreHandleGestureEvent(content::WebContents* source, |
| 218 const blink::WebGestureEvent& event) final; |
| 219 void RendererResponsive(content::WebContents* source) final; |
| 220 void RendererUnresponsive(content::WebContents* source) final; |
| 221 void RequestMediaAccessPermission( |
| 222 content::WebContents* source, |
| 223 const content::MediaStreamRequest& request, |
| 224 const content::MediaResponseCallback& callback) final; |
| 225 void RequestPointerLockPermission( |
| 226 bool user_gesture, |
| 227 bool last_unlocked_by_target, |
| 228 const base::Callback<void(bool)>& callback) final; |
| 229 bool CheckMediaAccessPermission(content::WebContents* source, |
| 230 const GURL& security_origin, |
| 231 content::MediaStreamType type) final; |
| 232 void CanDownload(const GURL& url, |
| 233 const std::string& request_method, |
| 234 const base::Callback<void(bool)>& callback) final; |
| 235 content::JavaScriptDialogManager* GetJavaScriptDialogManager( |
| 236 content::WebContents* source) final; |
| 237 void AddNewContents(content::WebContents* source, |
| 238 content::WebContents* new_contents, |
| 239 WindowOpenDisposition disposition, |
| 240 const gfx::Rect& initial_rect, |
| 241 bool user_gesture, |
| 242 bool* was_blocked) final; |
| 243 content::WebContents* OpenURLFromTab( |
| 244 content::WebContents* source, |
| 245 const content::OpenURLParams& params) final; |
| 246 void WebContentsCreated(content::WebContents* source_contents, |
| 247 int opener_render_frame_id, |
| 248 const std::string& frame_name, |
| 249 const GURL& target_url, |
| 250 content::WebContents* new_contents) final; |
| 251 void EnterFullscreenModeForTab(content::WebContents* web_contents, |
| 252 const GURL& origin) final; |
| 253 void ExitFullscreenModeForTab(content::WebContents* web_contents) final; |
| 254 bool IsFullscreenForTabOrPending( |
| 255 const content::WebContents* web_contents) const final; |
| 256 |
| 293 // WebContentsObserver implementation. | 257 // WebContentsObserver implementation. |
| 294 void DidCommitProvisionalLoadForFrame( | 258 void DidCommitProvisionalLoadForFrame( |
| 295 content::RenderFrameHost* render_frame_host, | 259 content::RenderFrameHost* render_frame_host, |
| 296 const GURL& url, | 260 const GURL& url, |
| 297 ui::PageTransition transition_type) override; | 261 ui::PageTransition transition_type) final; |
| 298 void DidFailProvisionalLoad(content::RenderFrameHost* render_frame_host, | 262 void DidFailProvisionalLoad(content::RenderFrameHost* render_frame_host, |
| 299 const GURL& validated_url, | 263 const GURL& validated_url, |
| 300 int error_code, | 264 int error_code, |
| 301 const base::string16& error_description, | 265 const base::string16& error_description, |
| 302 bool was_ignored_by_handler) override; | 266 bool was_ignored_by_handler) final; |
| 303 void DidStartProvisionalLoadForFrame( | 267 void DidStartProvisionalLoadForFrame( |
| 304 content::RenderFrameHost* render_frame_host, | 268 content::RenderFrameHost* render_frame_host, |
| 305 const GURL& validated_url, | 269 const GURL& validated_url, |
| 306 bool is_error_page, | 270 bool is_error_page, |
| 307 bool is_iframe_srcdoc) override; | 271 bool is_iframe_srcdoc) final; |
| 308 void RenderProcessGone(base::TerminationStatus status) override; | 272 void RenderProcessGone(base::TerminationStatus status) final; |
| 309 void UserAgentOverrideSet(const std::string& user_agent) override; | 273 void UserAgentOverrideSet(const std::string& user_agent) final; |
| 310 void FrameNameChanged(content::RenderFrameHost* render_frame_host, | 274 void FrameNameChanged(content::RenderFrameHost* render_frame_host, |
| 311 const std::string& name) override; | 275 const std::string& name) final; |
| 312 | 276 |
| 313 // Informs the embedder of a frame name change. | 277 // Informs the embedder of a frame name change. |
| 314 void ReportFrameNameChange(const std::string& name); | 278 void ReportFrameNameChange(const std::string& name); |
| 315 | 279 |
| 316 // Called after the load handler is called in the guest's main frame. | 280 // Called after the load handler is called in the guest's main frame. |
| 317 void LoadHandlerCalled(); | 281 void LoadHandlerCalled(); |
| 318 | 282 |
| 319 // Called when a redirect notification occurs. | 283 // Called when a redirect notification occurs. |
| 320 void LoadRedirect(const GURL& old_url, | 284 void LoadRedirect(const GURL& old_url, |
| 321 const GURL& new_url, | 285 const GURL& new_url, |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 353 // Creates a new guest window owned by this WebViewGuest. | 317 // Creates a new guest window owned by this WebViewGuest. |
| 354 void CreateNewGuestWebViewWindow(const content::OpenURLParams& params); | 318 void CreateNewGuestWebViewWindow(const content::OpenURLParams& params); |
| 355 | 319 |
| 356 void NewGuestWebViewCallback(const content::OpenURLParams& params, | 320 void NewGuestWebViewCallback(const content::OpenURLParams& params, |
| 357 content::WebContents* guest_web_contents); | 321 content::WebContents* guest_web_contents); |
| 358 | 322 |
| 359 bool HandleKeyboardShortcuts(const content::NativeWebKeyboardEvent& event); | 323 bool HandleKeyboardShortcuts(const content::NativeWebKeyboardEvent& event); |
| 360 | 324 |
| 361 void ApplyAttributes(const base::DictionaryValue& params); | 325 void ApplyAttributes(const base::DictionaryValue& params); |
| 362 | 326 |
| 363 void SetContextMenuPosition(const gfx::Point& position) override; | |
| 364 | |
| 365 // Identifies the set of rules registries belonging to this guest. | 327 // Identifies the set of rules registries belonging to this guest. |
| 366 int rules_registry_id_; | 328 int rules_registry_id_; |
| 367 | 329 |
| 368 // Handles find requests and replies for the webview find API. | 330 // Handles find requests and replies for the webview find API. |
| 369 WebViewFindHelper find_helper_; | 331 WebViewFindHelper find_helper_; |
| 370 | 332 |
| 371 base::ObserverList<ScriptExecutionObserver> script_observers_; | 333 base::ObserverList<ScriptExecutionObserver> script_observers_; |
| 372 scoped_ptr<ScriptExecutor> script_executor_; | 334 scoped_ptr<ScriptExecutor> script_executor_; |
| 373 | 335 |
| 374 content::NotificationRegistrar notification_registrar_; | 336 content::NotificationRegistrar notification_registrar_; |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 421 // This is used to ensure pending tasks will not fire after this object is | 383 // This is used to ensure pending tasks will not fire after this object is |
| 422 // destroyed. | 384 // destroyed. |
| 423 base::WeakPtrFactory<WebViewGuest> weak_ptr_factory_; | 385 base::WeakPtrFactory<WebViewGuest> weak_ptr_factory_; |
| 424 | 386 |
| 425 DISALLOW_COPY_AND_ASSIGN(WebViewGuest); | 387 DISALLOW_COPY_AND_ASSIGN(WebViewGuest); |
| 426 }; | 388 }; |
| 427 | 389 |
| 428 } // namespace extensions | 390 } // namespace extensions |
| 429 | 391 |
| 430 #endif // EXTENSIONS_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_GUEST_H_ | 392 #endif // EXTENSIONS_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_GUEST_H_ |
| OLD | NEW |