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

Unified Diff: content/browser/web_contents/web_contents_impl.h

Issue 2700613003: Enable find-in-page across GuestViews. (Closed)
Patch Set: Small fix. Created 3 years, 8 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
« no previous file with comments | « content/browser/find_request_manager.cc ('k') | content/browser/web_contents/web_contents_impl.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/web_contents/web_contents_impl.h
diff --git a/content/browser/web_contents/web_contents_impl.h b/content/browser/web_contents/web_contents_impl.h
index e9d29e4f59d5be984e8ca84c20350c91c00c7fbe..df95bfcac1c07b4b26ef5ac03f04e33d5495577c 100644
--- a/content/browser/web_contents/web_contents_impl.h
+++ b/content/browser/web_contents/web_contents_impl.h
@@ -132,10 +132,13 @@ class CONTENT_EXPORT WebContentsImpl
static std::vector<WebContentsImpl*> GetAllWebContents();
- static WebContentsImpl* FromFrameTreeNode(FrameTreeNode* frame_tree_node);
+ static WebContentsImpl* FromFrameTreeNode(
+ const FrameTreeNode* frame_tree_node);
static WebContents* FromRenderFrameHostID(int render_process_host_id,
int render_frame_host_id);
static WebContents* FromFrameTreeNodeId(int frame_tree_node_id);
+ static WebContentsImpl* FromOuterFrameTreeNode(
+ const FrameTreeNode* frame_tree_node);
// Complex initialization here. Specifically needed to avoid having
// members call back into our virtual functions in the constructor.
@@ -268,6 +271,24 @@ class CONTENT_EXPORT WebContentsImpl
// interface.
WebContentsBindingSet* GetBindingSet(const std::string& interface_name);
+ // Returns the focused WebContents.
+ // If there are multiple inner/outer WebContents (when embedding <webview>,
+ // <guestview>, ...) returns the single one containing the currently focused
+ // frame. Otherwise, returns this WebContents.
+ WebContentsImpl* GetFocusedWebContents();
+
+ // TODO(paulmeyer): Once GuestViews are no longer implemented as
+ // BrowserPluginGuests, frame traversal across WebContents should be moved to
+ // be handled by FrameTreeNode, and |GetInnerWebContents| and
+ // |GetWebContentsAndAllInner| can be removed.
+
+ // Returns a vector to the inner WebContents within this WebContents.
+ std::vector<WebContentsImpl*> GetInnerWebContents();
+
+ // Returns a vector containing this WebContents and all inner WebContents
+ // within it (recursively).
+ std::vector<WebContentsImpl*> GetWebContentsAndAllInner();
+
// WebContents ------------------------------------------------------
WebContentsDelegate* GetDelegate() override;
void SetDelegate(WebContentsDelegate* delegate) override;
@@ -811,6 +832,10 @@ class CONTENT_EXPORT WebContentsImpl
// |IsFullscreen| must return |true| when this method is called.
bool HasActiveEffectivelyFullscreenVideo() const;
+ // Called by this WebContents's BrowserPluginGuest (if one exists) to indicate
+ // that the guest will be destroyed.
+ void BrowserPluginGuestWillDestroy();
+
#if defined(OS_ANDROID)
// Called by FindRequestManager when all of the find match rects are in.
void NotifyFindMatchRectsReply(int version,
@@ -886,7 +911,16 @@ class CONTENT_EXPORT WebContentsImpl
WebContentsImpl* focused_web_contents() { return focused_web_contents_; }
void SetFocusedWebContents(WebContentsImpl* web_contents);
+ // Returns the inner WebContents within |frame|, if one exists, or nullptr
+ // otherwise.
+ WebContentsImpl* GetInnerWebContentsInFrame(const FrameTreeNode* frame);
+
+ const std::vector<WebContentsImpl*>& inner_web_contents() const;
+
private:
+ void AttachInnerWebContents(WebContentsImpl* inner_web_contents);
+ void DetachInnerWebContents(WebContentsImpl* inner_web_contents);
+
// FrameTreeNode::Observer implementation.
void OnFrameTreeNodeDestroyed(FrameTreeNode* node) final;
@@ -901,6 +935,9 @@ class CONTENT_EXPORT WebContentsImpl
// |current_web_contents_| as an inner WebContents.
int outer_contents_frame_tree_node_id_;
+ // List of inner WebContents that we host.
+ std::vector<WebContentsImpl*> inner_web_contents_;
+
// Only the root node should have this set. This indicates the WebContents
// whose frame tree has the focused frame. The WebContents tree could be
// arbitrarily deep.
@@ -1078,12 +1115,6 @@ class CONTENT_EXPORT WebContentsImpl
// receive page focus and blur events when the containing window changes focus
// state.
- // Returns the focused WebContents.
- // If there are multiple inner/outer WebContents (when embedding <webview>,
- // <guestview>, ...) returns the single one containing the currently focused
- // frame. Otherwise, returns this WebContents.
- WebContentsImpl* GetFocusedWebContents();
-
// Returns true if |this| is the focused WebContents or an ancestor of the
// focused WebContents.
bool ContainsOrIsFocusedWebContents();
@@ -1192,7 +1223,11 @@ class CONTENT_EXPORT WebContentsImpl
void SetJavaScriptDialogManagerForTesting(
JavaScriptDialogManager* dialog_manager);
- // Returns the FindRequestManager, or creates one if it doesn't already exist.
+ // Returns the FindRequestManager, which may be found in an outer WebContents.
+ FindRequestManager* GetFindRequestManager();
+
+ // Returns the FindRequestManager, or creates one if it doesn't already
+ // exist. The FindRequestManager may be found in an outer WebContents.
FindRequestManager* GetOrCreateFindRequestManager();
// Removes a registered WebContentsBindingSet by interface name.
« no previous file with comments | « content/browser/find_request_manager.cc ('k') | content/browser/web_contents/web_contents_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698