Chromium Code Reviews| 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 StartFindInternal( |
|
Fady Samuel
2015/10/09 22:35:19
Internal things should not be public? Why are thes
paulmeyer
2015/10/16 21:13:03
I originally named these without the "Internal" su
Fady Samuel
2015/10/16 21:17:29
Yea, I'd name them back if possible.
paulmeyer
2015/10/21 19:45:13
I discovered while renaming that StopFinding() col
| |
| 205 const base::string16& search_text, | 119 const base::string16& search_text, |
| 206 const blink::WebFindOptions& options, | 120 const blink::WebFindOptions& options, |
| 207 scoped_refptr<WebViewInternalFindFunction> find_function); | 121 scoped_refptr<WebViewInternalFindFunction> find_function); |
| 208 | 122 |
| 209 // Conclude a find request to clear highlighting. | 123 // Conclude a find request to clear highlighting. |
| 210 void StopFindingInternal(content::StopFindAction); | 124 void StopFindingInternal(content::StopFindAction); |
| 211 | 125 |
| 212 // If possible, navigate the guest to |relative_index| entries away from the | 126 // If possible, navigate the guest to |relative_index| entries away from the |
| 213 // current navigation entry. Returns true on success. | 127 // current navigation entry. Returns true on success. |
| 214 bool Go(int relative_index); | 128 bool Go(int relative_index); |
| 215 | 129 |
| 216 // Reload the guest. | 130 // Reload the guest. |
| 217 void Reload(); | 131 void Reload(); |
| 218 | 132 |
| 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. | 133 // Overrides the user agent for this guest. |
| 248 // This affects subsequent guest navigations. | 134 // This affects subsequent guest navigations. |
| 249 void SetUserAgentOverride(const std::string& user_agent_override); | 135 void SetUserAgentOverride(const std::string& user_agent_override); |
| 250 | 136 |
| 251 // Stop loading the guest. | 137 // Stop loading the guest. |
| 252 void Stop(); | 138 void Stop(); |
| 253 | 139 |
| 254 // Kill the guest process. | 140 // Kill the guest process. |
| 255 void Terminate(); | 141 void Terminate(); |
| 256 | 142 |
| 257 // Clears data in the storage partition of this guest. | 143 // Clears data in the storage partition of this guest. |
| 258 // | 144 // |
| 259 // Partition data that are newer than |removal_since| will be removed. | 145 // Partition data that are newer than |removal_since| will be removed. |
| 260 // |removal_mask| corresponds to bitmask in StoragePartition::RemoveDataMask. | 146 // |removal_mask| corresponds to bitmask in StoragePartition::RemoveDataMask. |
| 261 bool ClearData(const base::Time remove_since, | 147 bool ClearData(const base::Time remove_since, |
| 262 uint32 removal_mask, | 148 uint32 removal_mask, |
| 263 const base::Closure& callback); | 149 const base::Closure& callback); |
| 264 | 150 |
| 265 ScriptExecutor* script_executor() { return script_executor_.get(); } | 151 ScriptExecutor* script_executor() { return script_executor_.get(); } |
|
Fady Samuel
2015/10/10 01:02:12
Does this need to be public?
paulmeyer
2015/10/16 21:13:03
Yes, since it is also called in web_view_internal_
Fady Samuel
2015/10/16 21:17:28
Acknowledged.
| |
| 266 | 152 |
| 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: | 153 private: |
| 274 friend class WebViewPermissionHelper; | 154 friend class WebViewPermissionHelper; |
| 275 | 155 |
| 276 explicit WebViewGuest(content::WebContents* owner_web_contents); | 156 explicit WebViewGuest(content::WebContents* owner_web_contents); |
| 277 | 157 |
| 278 ~WebViewGuest() override; | 158 ~WebViewGuest() override; |
| 279 | 159 |
| 280 void ClearDataInternal(const base::Time remove_since, | 160 void ClearDataInternal(const base::Time remove_since, |
| 281 uint32 removal_mask, | 161 uint32 removal_mask, |
| 282 const base::Closure& callback); | 162 const base::Closure& callback); |
| 283 | 163 |
| 284 void OnWebViewNewWindowResponse(int new_window_instance_id, | 164 void OnWebViewNewWindowResponse(int new_window_instance_id, |
| 285 bool allow, | 165 bool allow, |
| 286 const std::string& user_input); | 166 const std::string& user_input); |
| 287 | 167 |
| 288 void OnFullscreenPermissionDecided(bool allowed, | 168 void OnFullscreenPermissionDecided(bool allowed, |
| 289 const std::string& user_input); | 169 const std::string& user_input); |
| 290 bool GuestMadeEmbedderFullscreen() const; | 170 bool GuestMadeEmbedderFullscreen() const; |
| 291 void SetFullscreenState(bool is_fullscreen); | 171 void SetFullscreenState(bool is_fullscreen); |
| 292 | 172 |
| 173 // GuestViewBase implementation. | |
| 174 bool CanRunInDetachedState() const final; | |
| 175 void CreateWebContents(const base::DictionaryValue& create_params, | |
| 176 const WebContentsCreatedCallback& callback) final; | |
| 177 void DidAttachToEmbedder() final; | |
| 178 void DidDropLink(const GURL& url) final; | |
| 179 void DidInitialize(const base::DictionaryValue& create_params) final; | |
| 180 void EmbedderFullscreenToggled(bool entered_fullscreen) final; | |
| 181 void FindReply(content::WebContents* source, | |
| 182 int request_id, | |
| 183 int number_of_matches, | |
| 184 const gfx::Rect& selection_rect, | |
| 185 int active_match_ordinal, | |
| 186 bool final_update) final; | |
| 187 const char* GetAPINamespace() const final; | |
| 188 int GetTaskPrefix() const final; | |
| 189 void GuestDestroyed() final; | |
| 190 void GuestReady() final; | |
| 191 void GuestSizeChangedDueToAutoSize(const gfx::Size& old_size, | |
| 192 const gfx::Size& new_size) final; | |
| 193 void GuestViewDidStopLoading() final; | |
| 194 void GuestZoomChanged(double old_zoom_level, double new_zoom_level) final; | |
| 195 bool IsAutoSizeSupported() const final; | |
| 196 void SetContextMenuPosition(const gfx::Point& position) final; | |
| 197 void SignalWhenReady(const base::Closure& callback) final; | |
| 198 bool ShouldHandleFindRequestsForEmbedder() const final; | |
| 199 void WillAttachToEmbedder() final; | |
| 200 void WillDestroy() final; | |
| 201 | |
| 202 // NotificationObserver implementation. | |
| 203 void Observe(int type, | |
| 204 const content::NotificationSource& source, | |
| 205 const content::NotificationDetails& details) final; | |
| 206 | |
| 207 // WebContentsDelegate implementation. | |
| 208 bool AddMessageToConsole(content::WebContents* source, | |
| 209 int32 level, | |
| 210 const base::string16& message, | |
| 211 int32 line_no, | |
| 212 const base::string16& source_id) final; | |
| 213 void CloseContents(content::WebContents* source) final; | |
| 214 bool HandleContextMenu(const content::ContextMenuParams& params) final; | |
| 215 void HandleKeyboardEvent(content::WebContents* source, | |
| 216 const content::NativeWebKeyboardEvent& event) final; | |
| 217 void LoadProgressChanged(content::WebContents* source, double progress) final; | |
| 218 bool PreHandleGestureEvent(content::WebContents* source, | |
| 219 const blink::WebGestureEvent& event) final; | |
| 220 void RendererResponsive(content::WebContents* source) final; | |
| 221 void RendererUnresponsive(content::WebContents* source) final; | |
| 222 void RequestMediaAccessPermission( | |
| 223 content::WebContents* source, | |
| 224 const content::MediaStreamRequest& request, | |
| 225 const content::MediaResponseCallback& callback) final; | |
| 226 void RequestPointerLockPermission( | |
| 227 bool user_gesture, | |
| 228 bool last_unlocked_by_target, | |
| 229 const base::Callback<void(bool)>& callback) final; | |
| 230 bool CheckMediaAccessPermission(content::WebContents* source, | |
| 231 const GURL& security_origin, | |
| 232 content::MediaStreamType type) final; | |
| 233 void CanDownload(const GURL& url, | |
| 234 const std::string& request_method, | |
| 235 const base::Callback<void(bool)>& callback) final; | |
| 236 content::JavaScriptDialogManager* GetJavaScriptDialogManager( | |
| 237 content::WebContents* source) final; | |
| 238 void AddNewContents(content::WebContents* source, | |
| 239 content::WebContents* new_contents, | |
| 240 WindowOpenDisposition disposition, | |
| 241 const gfx::Rect& initial_rect, | |
| 242 bool user_gesture, | |
| 243 bool* was_blocked) final; | |
| 244 content::WebContents* OpenURLFromTab( | |
| 245 content::WebContents* source, | |
| 246 const content::OpenURLParams& params) final; | |
| 247 void WebContentsCreated(content::WebContents* source_contents, | |
| 248 int opener_render_frame_id, | |
| 249 const std::string& frame_name, | |
| 250 const GURL& target_url, | |
| 251 content::WebContents* new_contents) final; | |
| 252 void EnterFullscreenModeForTab(content::WebContents* web_contents, | |
| 253 const GURL& origin) final; | |
| 254 void ExitFullscreenModeForTab(content::WebContents* web_contents) final; | |
| 255 bool IsFullscreenForTabOrPending( | |
| 256 const content::WebContents* web_contents) const final; | |
| 257 | |
| 293 // WebContentsObserver implementation. | 258 // WebContentsObserver implementation. |
| 294 void DidCommitProvisionalLoadForFrame( | 259 void DidCommitProvisionalLoadForFrame( |
| 295 content::RenderFrameHost* render_frame_host, | 260 content::RenderFrameHost* render_frame_host, |
| 296 const GURL& url, | 261 const GURL& url, |
| 297 ui::PageTransition transition_type) override; | 262 ui::PageTransition transition_type) final; |
| 298 void DidFailProvisionalLoad(content::RenderFrameHost* render_frame_host, | 263 void DidFailProvisionalLoad(content::RenderFrameHost* render_frame_host, |
| 299 const GURL& validated_url, | 264 const GURL& validated_url, |
| 300 int error_code, | 265 int error_code, |
| 301 const base::string16& error_description, | 266 const base::string16& error_description, |
| 302 bool was_ignored_by_handler) override; | 267 bool was_ignored_by_handler) final; |
| 303 void DidStartProvisionalLoadForFrame( | 268 void DidStartProvisionalLoadForFrame( |
| 304 content::RenderFrameHost* render_frame_host, | 269 content::RenderFrameHost* render_frame_host, |
| 305 const GURL& validated_url, | 270 const GURL& validated_url, |
| 306 bool is_error_page, | 271 bool is_error_page, |
| 307 bool is_iframe_srcdoc) override; | 272 bool is_iframe_srcdoc) final; |
| 308 void RenderProcessGone(base::TerminationStatus status) override; | 273 void RenderProcessGone(base::TerminationStatus status) final; |
| 309 void UserAgentOverrideSet(const std::string& user_agent) override; | 274 void UserAgentOverrideSet(const std::string& user_agent) final; |
| 310 void FrameNameChanged(content::RenderFrameHost* render_frame_host, | 275 void FrameNameChanged(content::RenderFrameHost* render_frame_host, |
| 311 const std::string& name) override; | 276 const std::string& name) final; |
| 312 | 277 |
| 313 // Informs the embedder of a frame name change. | 278 // Informs the embedder of a frame name change. |
| 314 void ReportFrameNameChange(const std::string& name); | 279 void ReportFrameNameChange(const std::string& name); |
| 315 | 280 |
| 316 // Called after the load handler is called in the guest's main frame. | 281 // Called after the load handler is called in the guest's main frame. |
| 317 void LoadHandlerCalled(); | 282 void LoadHandlerCalled(); |
| 318 | 283 |
| 319 // Called when a redirect notification occurs. | 284 // Called when a redirect notification occurs. |
| 320 void LoadRedirect(const GURL& old_url, | 285 void LoadRedirect(const GURL& old_url, |
| 321 const GURL& new_url, | 286 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. | 318 // Creates a new guest window owned by this WebViewGuest. |
| 354 void CreateNewGuestWebViewWindow(const content::OpenURLParams& params); | 319 void CreateNewGuestWebViewWindow(const content::OpenURLParams& params); |
| 355 | 320 |
| 356 void NewGuestWebViewCallback(const content::OpenURLParams& params, | 321 void NewGuestWebViewCallback(const content::OpenURLParams& params, |
| 357 content::WebContents* guest_web_contents); | 322 content::WebContents* guest_web_contents); |
| 358 | 323 |
| 359 bool HandleKeyboardShortcuts(const content::NativeWebKeyboardEvent& event); | 324 bool HandleKeyboardShortcuts(const content::NativeWebKeyboardEvent& event); |
| 360 | 325 |
| 361 void ApplyAttributes(const base::DictionaryValue& params); | 326 void ApplyAttributes(const base::DictionaryValue& params); |
| 362 | 327 |
| 363 void SetContextMenuPosition(const gfx::Point& position) override; | |
| 364 | |
| 365 // Identifies the set of rules registries belonging to this guest. | 328 // Identifies the set of rules registries belonging to this guest. |
| 366 int rules_registry_id_; | 329 int rules_registry_id_; |
| 367 | 330 |
| 368 // Handles find requests and replies for the webview find API. | 331 // Handles find requests and replies for the webview find API. |
| 369 WebViewFindHelper find_helper_; | 332 WebViewFindHelper find_helper_; |
| 370 | 333 |
| 371 base::ObserverList<ScriptExecutionObserver> script_observers_; | 334 base::ObserverList<ScriptExecutionObserver> script_observers_; |
| 372 scoped_ptr<ScriptExecutor> script_executor_; | 335 scoped_ptr<ScriptExecutor> script_executor_; |
| 373 | 336 |
| 374 content::NotificationRegistrar notification_registrar_; | 337 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 | 384 // This is used to ensure pending tasks will not fire after this object is |
| 422 // destroyed. | 385 // destroyed. |
| 423 base::WeakPtrFactory<WebViewGuest> weak_ptr_factory_; | 386 base::WeakPtrFactory<WebViewGuest> weak_ptr_factory_; |
| 424 | 387 |
| 425 DISALLOW_COPY_AND_ASSIGN(WebViewGuest); | 388 DISALLOW_COPY_AND_ASSIGN(WebViewGuest); |
| 426 }; | 389 }; |
| 427 | 390 |
| 428 } // namespace extensions | 391 } // namespace extensions |
| 429 | 392 |
| 430 #endif // EXTENSIONS_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_GUEST_H_ | 393 #endif // EXTENSIONS_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_GUEST_H_ |
| OLD | NEW |