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 UI_WEB_DIALOGS_WEB_DIALOG_WEB_CONTENTS_DELEGATE_H_ 6 #define UI_WEB_DIALOGS_WEB_DIALOG_WEB_CONTENTS_DELEGATE_H_ 7 8 #include "base/compiler_specific.h" 9 #include "content/public/browser/web_contents_delegate.h" 10 #include "ui/web_dialogs/web_dialogs_export.h" 11 12 namespace ui { 13 14 // This class implements (and mostly ignores) most of 15 // content::WebContentsDelegate for use in a Web dialog. Subclasses need only 16 // override a few methods instead of the everything from 17 // content::WebContentsDelegate; this way, implementations on all platforms 18 // behave consistently. 19 class WEB_DIALOGS_EXPORT WebDialogWebContentsDelegate 20 : public content::WebContentsDelegate { 21 public: 22 // Handles OpenURLFromTab and AddNewContents for WebDialogWebContentsDelegate. 23 class WebContentsHandler { 24 public: ~WebContentsHandler()25 virtual ~WebContentsHandler() {} 26 virtual content::WebContents* OpenURLFromTab( 27 content::BrowserContext* context, 28 content::WebContents* source, 29 const content::OpenURLParams& params) = 0; 30 virtual void AddNewContents(content::BrowserContext* context, 31 content::WebContents* source, 32 content::WebContents* new_contents, 33 WindowOpenDisposition disposition, 34 const gfx::Rect& initial_pos, 35 bool user_gesture) = 0; 36 }; 37 38 // context and handler must be non-NULL. 39 // Takes the ownership of handler. 40 WebDialogWebContentsDelegate(content::BrowserContext* context, 41 WebContentsHandler* handler); 42 43 virtual ~WebDialogWebContentsDelegate(); 44 45 // The returned browser context is guaranteed to be original if non-NULL. browser_context()46 content::BrowserContext* browser_context() const { 47 return browser_context_; 48 } 49 50 // Calling this causes all following events sent from the 51 // WebContents object to be ignored. It also makes all following 52 // calls to browser_context() return NULL. 53 void Detach(); 54 55 // content::WebContentsDelegate declarations. 56 virtual content::WebContents* OpenURLFromTab( 57 content::WebContents* source, 58 const content::OpenURLParams& params) OVERRIDE; 59 virtual void AddNewContents(content::WebContents* source, 60 content::WebContents* new_contents, 61 WindowOpenDisposition disposition, 62 const gfx::Rect& initial_pos, 63 bool user_gesture, 64 bool* was_blocked) OVERRIDE; 65 virtual bool IsPopupOrPanel( 66 const content::WebContents* source) const OVERRIDE; 67 virtual bool PreHandleGestureEvent( 68 content::WebContents* source, 69 const blink::WebGestureEvent& event) OVERRIDE; 70 71 private: 72 // Weak pointer. Always an original profile. 73 content::BrowserContext* browser_context_; 74 75 scoped_ptr<WebContentsHandler> handler_; 76 77 DISALLOW_COPY_AND_ASSIGN(WebDialogWebContentsDelegate); 78 }; 79 80 } // namespace ui 81 82 #endif // UI_WEB_DIALOGS_WEB_DIALOG_WEB_CONTENTS_DELEGATE_H_ 83