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: 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. 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 60 virtual void AddNewContents(content::WebContents* source, 61 content::WebContents* new_contents, 62 WindowOpenDisposition disposition, 63 const gfx::Rect& initial_pos, 64 bool user_gesture, 65 bool* was_blocked) OVERRIDE; 66 virtual bool IsPopupOrPanel( 67 const content::WebContents* source) const OVERRIDE; 68 69 private: 70 // Weak pointer. Always an original profile. 71 content::BrowserContext* browser_context_; 72 73 scoped_ptr<WebContentsHandler> handler_; 74 75 DISALLOW_COPY_AND_ASSIGN(WebDialogWebContentsDelegate); 76 }; 77 78 } // namespace ui 79 80 #endif // UI_WEB_DIALOGS_WEB_DIALOG_WEB_CONTENTS_DELEGATE_H_ 81