123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- // Copyright (c) 2012 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #ifndef UI_WEB_DIALOGS_WEB_DIALOG_WEB_CONTENTS_DELEGATE_H_
- #define UI_WEB_DIALOGS_WEB_DIALOG_WEB_CONTENTS_DELEGATE_H_
- #include <memory>
- #include "base/memory/raw_ptr.h"
- #include "content/public/browser/web_contents_delegate.h"
- #include "ui/web_dialogs/web_dialogs_export.h"
- namespace blink {
- namespace mojom {
- class FileChooserParams;
- }
- } // namespace blink
- namespace content {
- class BrowserContext;
- class FileSelectListener;
- class RenderFrameHost;
- }
- namespace ui {
- // This class implements (and mostly ignores) most of
- // content::WebContentsDelegate for use in a Web dialog. Subclasses need only
- // override a few methods instead of the everything from
- // content::WebContentsDelegate; this way, implementations on all platforms
- // behave consistently.
- class WEB_DIALOGS_EXPORT WebDialogWebContentsDelegate
- : public content::WebContentsDelegate {
- public:
- // Handles OpenURLFromTab and AddNewContents for WebDialogWebContentsDelegate.
- class WebContentsHandler {
- public:
- virtual ~WebContentsHandler() {}
- virtual content::WebContents* OpenURLFromTab(
- content::BrowserContext* context,
- content::WebContents* source,
- const content::OpenURLParams& params) = 0;
- virtual void AddNewContents(
- content::BrowserContext* context,
- content::WebContents* source,
- std::unique_ptr<content::WebContents> new_contents,
- const GURL& target_url,
- WindowOpenDisposition disposition,
- const gfx::Rect& initial_rect,
- bool user_gesture) = 0;
- // This is added to allow the injection of a file chooser handler.
- // The WebDialogWebContentsDelegate's original implementation does not
- // do anything for file chooser request
- virtual void RunFileChooser(
- content::RenderFrameHost* render_frame_host,
- scoped_refptr<content::FileSelectListener> listener,
- const blink::mojom::FileChooserParams& params) = 0;
- };
- // |context| and |handler| must be non-NULL.
- WebDialogWebContentsDelegate(content::BrowserContext* context,
- std::unique_ptr<WebContentsHandler> handler);
- WebDialogWebContentsDelegate(const WebDialogWebContentsDelegate&) = delete;
- WebDialogWebContentsDelegate& operator=(const WebDialogWebContentsDelegate&) =
- delete;
- ~WebDialogWebContentsDelegate() override;
- // The returned browser context is guaranteed to be original if non-NULL.
- content::BrowserContext* browser_context() const {
- return browser_context_;
- }
- // Calling this causes all following events sent from the
- // WebContents object to be ignored. It also makes all following
- // calls to browser_context() return NULL.
- void Detach();
- // content::WebContentsDelegate declarations.
- content::WebContents* OpenURLFromTab(
- content::WebContents* source,
- const content::OpenURLParams& params) override;
- void AddNewContents(content::WebContents* source,
- std::unique_ptr<content::WebContents> new_contents,
- const GURL& target_url,
- WindowOpenDisposition disposition,
- const gfx::Rect& initial_rect,
- bool user_gesture,
- bool* was_blocked) override;
- bool PreHandleGestureEvent(content::WebContents* source,
- const blink::WebGestureEvent& event) override;
- void RunFileChooser(content::RenderFrameHost* render_frame_host,
- scoped_refptr<content::FileSelectListener> listener,
- const blink::mojom::FileChooserParams& params) override;
- private:
- // Weak pointer. Always an original profile.
- raw_ptr<content::BrowserContext> browser_context_;
- std::unique_ptr<WebContentsHandler> const handler_;
- };
- } // namespace ui
- #endif // UI_WEB_DIALOGS_WEB_DIALOG_WEB_CONTENTS_DELEGATE_H_
|