Home | History | Annotate | Download | only in web_dialogs
      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