Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2170)

Unified Diff: chrome/browser/guest_view/web_view/web_view_guest.h

Issue 272573005: <webview>: Move NewWindow API to chrome (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@guestview_manager_rename
Patch Set: Merge with ToT Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/guest_view/web_view/web_view_guest.h
diff --git a/chrome/browser/guest_view/web_view/web_view_guest.h b/chrome/browser/guest_view/web_view/web_view_guest.h
index 2814dc5e4731b399c96c32415797f84dcbfe7b7f..ee86f63b03ac6e950ad9540914f03f061d77a7ac 100644
--- a/chrome/browser/guest_view/web_view/web_view_guest.h
+++ b/chrome/browser/guest_view/web_view/web_view_guest.h
@@ -12,6 +12,7 @@
#include "chrome/browser/guest_view/guest_view.h"
#include "chrome/browser/guest_view/web_view/javascript_dialog_helper.h"
#include "chrome/browser/guest_view/web_view/web_view_find_helper.h"
+#include "chrome/browser/guest_view/web_view/web_view_permission_types.h"
#include "chrome/common/extensions/api/webview.h"
#include "content/public/browser/javascript_dialog_manager.h"
#include "content/public/browser/notification_registrar.h"
@@ -46,9 +47,9 @@ class WebViewGuest : public GuestView<WebViewGuest>,
public content::NotificationObserver,
public content::WebContentsObserver {
public:
- WebViewGuest(content::WebContents* guest_web_contents,
- const std::string& embedder_extension_id,
- const base::WeakPtr<GuestViewBase>& opener);
+ WebViewGuest(int guest_instance_id,
+ content::WebContents* guest_web_contents,
+ const std::string& embedder_extension_id);
// Returns guestview::kInstanceIDNone if |contents| does not correspond to a
// WebViewGuest.
@@ -88,18 +89,8 @@ class WebViewGuest : public GuestView<WebViewGuest>,
virtual void HandleKeyboardEvent(
const content::NativeWebKeyboardEvent& event) OVERRIDE;
virtual bool IsDragAndDropEnabled() OVERRIDE;
- virtual bool IsOverridingUserAgent() const OVERRIDE;
- virtual void LoadAbort(bool is_top_level,
- const GURL& url,
- const std::string& error_type) OVERRIDE;
virtual void RendererResponsive() OVERRIDE;
virtual void RendererUnresponsive() OVERRIDE;
- virtual void RequestPermission(
- BrowserPluginPermissionType permission_type,
- const base::DictionaryValue& request_info,
- const PermissionResponseCallback& callback,
- bool allowed_by_default) OVERRIDE;
- virtual GURL ResolveURL(const std::string& src) OVERRIDE;
virtual void SizeChanged(const gfx::Size& old_size, const gfx::Size& new_size)
OVERRIDE;
virtual void RequestMediaAccessPermission(
@@ -121,6 +112,22 @@ class WebViewGuest : public GuestView<WebViewGuest>,
virtual void RunFileChooser(
content::WebContents* web_contents,
const content::FileChooserParams& params) OVERRIDE;
+ virtual void NavigateGuest(const std::string& src) OVERRIDE;
+ virtual void Destroy() OVERRIDE;
+ virtual void AddNewContents(content::WebContents* source,
+ content::WebContents* new_contents,
+ WindowOpenDisposition disposition,
+ const gfx::Rect& initial_pos,
+ bool user_gesture,
+ bool* was_blocked) OVERRIDE;
+ virtual content::WebContents* OpenURLFromTab(
+ content::WebContents* source,
+ const content::OpenURLParams& params) OVERRIDE;
+ virtual void WebContentsCreated(content::WebContents* source_contents,
+ int opener_render_frame_id,
+ const base::string16& frame_name,
+ const GURL& target_url,
+ content::WebContents* new_contents) OVERRIDE;
// NotificationObserver implementation.
virtual void Observe(int type,
@@ -148,6 +155,15 @@ class WebViewGuest : public GuestView<WebViewGuest>,
// Reload the guest.
void Reload();
+ typedef base::Callback<void(bool /* allow */,
+ const std::string& /* user_input */)>
+ PermissionResponseCallback;
+ int RequestPermission(
+ WebViewPermissionType permission_type,
+ const base::DictionaryValue& request_info,
+ const PermissionResponseCallback& callback,
+ bool allowed_by_default);
+
// Requests Geolocation Permission from the embedder.
void RequestGeolocationPermission(int bridge_id,
const GURL& requesting_frame,
@@ -179,6 +195,10 @@ class WebViewGuest : public GuestView<WebViewGuest>,
bool allow,
const std::string& user_input);
+ void OnWebViewNewWindowResponse(int new_window_instance_id,
+ bool allow,
+ const std::string& user_input);
+
enum PermissionResponseAction {
DENY,
ALLOW,
@@ -226,11 +246,11 @@ class WebViewGuest : public GuestView<WebViewGuest>,
// A map to store the callback for a request keyed by the request's id.
struct PermissionResponseInfo {
PermissionResponseCallback callback;
- BrowserPluginPermissionType permission_type;
+ WebViewPermissionType permission_type;
bool allowed_by_default;
PermissionResponseInfo();
PermissionResponseInfo(const PermissionResponseCallback& callback,
- BrowserPluginPermissionType permission_type,
+ WebViewPermissionType permission_type,
bool allowed_by_default);
~PermissionResponseInfo();
};
@@ -299,11 +319,33 @@ class WebViewGuest : public GuestView<WebViewGuest>,
// provided |bridge_id|. It returns the request ID of the geolocation request.
int RemoveBridgeID(int bridge_id);
- int RequestPermissionInternal(
- BrowserPluginPermissionType permission_type,
- const base::DictionaryValue& request_info,
- const PermissionResponseCallback& callback,
- bool allowed_by_default);
+ void LoadURLWithParams(const GURL& url,
+ const content::Referrer& referrer,
+ content::PageTransition transition_type,
+ content::WebContents* web_contents);
+
+ void RequestNewWindowPermission(
+ WindowOpenDisposition disposition,
+ const gfx::Rect& initial_bounds,
+ bool user_gesture,
+ content::WebContents* new_contents);
+
+ // Destroy unattached new windows that have been opened by this
+ // WebViewGuest.
+ void DestroyUnattachedWindows();
+
+ // Requests resolution of a potentially relative URL.
+ GURL ResolveURL(const std::string& src);
+
+ // Notification that a load in the guest resulted in abort. Note that |url|
+ // may be invalid.
+ void LoadAbort(bool is_top_level,
+ const GURL& url,
+ const std::string& error_type);
+
+
+ // Creates a new guest window owned by this WebViewGuest.
+ WebViewGuest* CreateNewGuestWindow(const content::OpenURLParams& params);
bool HandleKeyboardShortcuts(const content::NativeWebKeyboardEvent& event);
@@ -361,6 +403,19 @@ class WebViewGuest : public GuestView<WebViewGuest>,
std::map<int, int> bridge_id_to_request_id_map_;
+ // Tracks the name, and target URL of the new window. Once the first
+ // navigation commits, we no longer track this information.
+ struct NewWindowInfo {
+ GURL url;
+ std::string name;
+ NewWindowInfo(const GURL& url, const std::string& name) :
+ url(url),
+ name(name) {}
+ };
+
+ typedef std::map<WebViewGuest*, NewWindowInfo> PendingWindowMap;
+ PendingWindowMap pending_new_windows_;
+
DISALLOW_COPY_AND_ASSIGN(WebViewGuest);
};
« no previous file with comments | « chrome/browser/guest_view/web_view/web_view_constants.cc ('k') | chrome/browser/guest_view/web_view/web_view_guest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698