| Index: content/browser/web_contents/web_contents_impl.cc
|
| diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
|
| index 7f45ab817ae157f7ba283b6ff1d8377b1b87c5af..f406d8401809316972b44ec55bfc59f2ab8efb93 100644
|
| --- a/content/browser/web_contents/web_contents_impl.cc
|
| +++ b/content/browser/web_contents/web_contents_impl.cc
|
| @@ -257,14 +257,6 @@ class AXTreeSnapshotCombiner : public base::RefCounted<AXTreeSnapshotCombiner> {
|
| AXTreeSnapshotCallback callback_;
|
| };
|
|
|
| -// Helper for GetInnerWebContents().
|
| -bool GetInnerWebContentsHelper(
|
| - std::vector<WebContentsImpl*>* all_guest_contents,
|
| - WebContents* guest_contents) {
|
| - all_guest_contents->push_back(static_cast<WebContentsImpl*>(guest_contents));
|
| - return false;
|
| -}
|
| -
|
| } // namespace
|
|
|
| WebContents* WebContents::Create(const WebContents::CreateParams& params) {
|
| @@ -389,9 +381,6 @@ WebContentsImpl::WebContentsTreeNode::WebContentsTreeNode(
|
| WebContentsImpl::WebContentsTreeNode::~WebContentsTreeNode() {
|
| if (OuterContentsFrameTreeNode())
|
| OuterContentsFrameTreeNode()->RemoveObserver(this);
|
| -
|
| - if (outer_web_contents_)
|
| - outer_web_contents_->node_.DetachInnerWebContents(current_web_contents_);
|
| }
|
|
|
| void WebContentsImpl::WebContentsTreeNode::ConnectToOuterWebContents(
|
| @@ -402,25 +391,9 @@ void WebContentsImpl::WebContentsTreeNode::ConnectToOuterWebContents(
|
| outer_contents_frame_tree_node_id_ =
|
| outer_contents_frame->frame_tree_node()->frame_tree_node_id();
|
|
|
| - outer_web_contents_->node_.AttachInnerWebContents(current_web_contents_);
|
| outer_contents_frame->frame_tree_node()->AddObserver(this);
|
| }
|
|
|
| -void WebContentsImpl::WebContentsTreeNode::AttachInnerWebContents(
|
| - WebContentsImpl* inner_web_contents) {
|
| - inner_web_contents_.push_back(inner_web_contents);
|
| -}
|
| -
|
| -void WebContentsImpl::WebContentsTreeNode::DetachInnerWebContents(
|
| - WebContentsImpl* inner_web_contents) {
|
| - DCHECK(std::find(inner_web_contents_.begin(), inner_web_contents_.end(),
|
| - inner_web_contents) != inner_web_contents_.end());
|
| - inner_web_contents_.erase(
|
| - std::remove(inner_web_contents_.begin(), inner_web_contents_.end(),
|
| - inner_web_contents),
|
| - inner_web_contents_.end());
|
| -}
|
| -
|
| FrameTreeNode*
|
| WebContentsImpl::WebContentsTreeNode::OuterContentsFrameTreeNode() const {
|
| return FrameTreeNode::GloballyFindByID(outer_contents_frame_tree_node_id_);
|
| @@ -441,23 +414,6 @@ void WebContentsImpl::WebContentsTreeNode::SetFocusedWebContents(
|
| focused_web_contents_ = web_contents;
|
| }
|
|
|
| -WebContentsImpl*
|
| -WebContentsImpl::WebContentsTreeNode::GetInnerWebContentsInFrame(
|
| - const FrameTreeNode* frame) {
|
| - auto ftn_id = frame->frame_tree_node_id();
|
| - for (WebContentsImpl* contents : inner_web_contents_) {
|
| - if (contents->node_.outer_contents_frame_tree_node_id() == ftn_id) {
|
| - return contents;
|
| - }
|
| - }
|
| - return nullptr;
|
| -}
|
| -
|
| -const std::vector<WebContentsImpl*>&
|
| -WebContentsImpl::WebContentsTreeNode::inner_web_contents() const {
|
| - return inner_web_contents_;
|
| -}
|
| -
|
| // WebContentsImpl -------------------------------------------------------------
|
|
|
| WebContentsImpl::WebContentsImpl(BrowserContext* browser_context)
|
| @@ -708,7 +664,7 @@ std::vector<WebContentsImpl*> WebContentsImpl::GetAllWebContents() {
|
|
|
| // static
|
| WebContentsImpl* WebContentsImpl::FromFrameTreeNode(
|
| - const FrameTreeNode* frame_tree_node) {
|
| + FrameTreeNode* frame_tree_node) {
|
| return static_cast<WebContentsImpl*>(
|
| WebContents::FromRenderFrameHost(frame_tree_node->current_frame_host()));
|
| }
|
| @@ -725,13 +681,6 @@ WebContents* WebContentsImpl::FromRenderFrameHostID(int render_process_host_id,
|
| return WebContents::FromRenderFrameHost(render_frame_host);
|
| }
|
|
|
| -// static
|
| -WebContentsImpl* WebContentsImpl::FromOuterFrameTreeNode(
|
| - const FrameTreeNode* frame_tree_node) {
|
| - return WebContentsImpl::FromFrameTreeNode(frame_tree_node)
|
| - ->node_.GetInnerWebContentsInFrame(frame_tree_node);
|
| -}
|
| -
|
| RenderFrameHostManager* WebContentsImpl::GetRenderManagerForTesting() {
|
| return GetRenderManager();
|
| }
|
| @@ -1089,29 +1038,6 @@ WebContentsBindingSet* WebContentsImpl::GetBindingSet(
|
| return it->second;
|
| }
|
|
|
| -std::vector<WebContentsImpl*> WebContentsImpl::GetInnerWebContents() {
|
| - if (browser_plugin_embedder_) {
|
| - std::vector<WebContentsImpl*> inner_contents;
|
| - GetBrowserContext()->GetGuestManager()->ForEachGuest(
|
| - this, base::Bind(&GetInnerWebContentsHelper, &inner_contents));
|
| - return inner_contents;
|
| - }
|
| -
|
| - return node_.inner_web_contents();
|
| -}
|
| -
|
| -std::vector<WebContentsImpl*> WebContentsImpl::GetWebContentsAndAllInner() {
|
| - std::vector<WebContentsImpl*> all_contents(1, this);
|
| -
|
| - for (size_t i = 0; i != all_contents.size(); ++i) {
|
| - for (auto* inner_contents : all_contents[i]->GetInnerWebContents()) {
|
| - all_contents.push_back(inner_contents);
|
| - }
|
| - }
|
| -
|
| - return all_contents;
|
| -}
|
| -
|
| void WebContentsImpl::UpdateDeviceScaleFactor(double device_scale_factor) {
|
| SendPageMessage(
|
| new PageMsg_SetDeviceScaleFactor(MSG_ROUTING_NONE, device_scale_factor));
|
| @@ -1925,16 +1851,8 @@ RenderWidgetHostImpl* WebContentsImpl::GetFocusedRenderWidgetHost(
|
| if (receiving_widget != GetMainFrame()->GetRenderWidgetHost())
|
| return receiving_widget;
|
|
|
| - // If the focused WebContents is a guest WebContents, then get the focused
|
| - // frame in the embedder WebContents instead.
|
| - FrameTreeNode* focused_frame = nullptr;
|
| - WebContentsImpl* focused_contents = GetFocusedWebContents();
|
| - if (focused_contents->browser_plugin_guest_ &&
|
| - !GuestMode::IsCrossProcessFrameGuest(focused_contents)) {
|
| - focused_frame = frame_tree_.GetFocusedFrame();
|
| - } else {
|
| - focused_frame = GetFocusedWebContents()->frame_tree_.GetFocusedFrame();
|
| - }
|
| + FrameTreeNode* focused_frame =
|
| + GetFocusedWebContents()->frame_tree_.GetFocusedFrame();
|
| if (!focused_frame)
|
| return receiving_widget;
|
|
|
| @@ -3360,12 +3278,25 @@ void WebContentsImpl::Find(int request_id,
|
| return;
|
| }
|
|
|
| + // See if a top level browser plugin handles the find request first.
|
| + // TODO(paulmeyer): Remove this after find-in-page works across GuestViews.
|
| + if (browser_plugin_embedder_ &&
|
| + browser_plugin_embedder_->Find(request_id, search_text, options)) {
|
| + return;
|
| + }
|
| +
|
| GetOrCreateFindRequestManager()->Find(request_id, search_text, options);
|
| }
|
|
|
| void WebContentsImpl::StopFinding(StopFindAction action) {
|
| - if (FindRequestManager* manager = GetFindRequestManager())
|
| - manager->StopFinding(action);
|
| + // See if a top level browser plugin handles the stop finding request first.
|
| + // TODO(paulmeyer): Remove this after find-in-page works across GuestViews.
|
| + if (browser_plugin_embedder_ &&
|
| + browser_plugin_embedder_->StopFinding(action)) {
|
| + return;
|
| + }
|
| +
|
| + GetOrCreateFindRequestManager()->StopFinding(action);
|
| }
|
|
|
| bool WebContentsImpl::WasRecentlyAudible() {
|
| @@ -4845,8 +4776,6 @@ void WebContentsImpl::SetFocusedFrame(FrameTreeNode* node,
|
| // input redirection mechanism. It must not become focused direcly.
|
| if (!GuestMode::IsCrossProcessFrameGuest(this) && browser_plugin_guest_) {
|
| frame_tree_.SetFocusedFrame(node, source);
|
| - if (GetFocusedWebContents() != this)
|
| - GetOutermostWebContents()->node_.SetFocusedWebContents(this);
|
| return;
|
| }
|
|
|
| @@ -5294,34 +5223,12 @@ std::unique_ptr<WebUIImpl> WebContentsImpl::CreateWebUI(
|
| return nullptr;
|
| }
|
|
|
| -FindRequestManager* WebContentsImpl::GetFindRequestManager() {
|
| - for (WebContentsImpl* contents = this; contents;
|
| - contents = contents->GetOuterWebContents()) {
|
| - if (contents->find_request_manager_)
|
| - return contents->find_request_manager_.get();
|
| - }
|
| -
|
| - return nullptr;
|
| -}
|
| -
|
| FindRequestManager* WebContentsImpl::GetOrCreateFindRequestManager() {
|
| - if (FindRequestManager* manager = GetFindRequestManager())
|
| - return manager;
|
| -
|
| - // No existing FindRequestManager found, so one must be created.
|
| - find_request_manager_.reset(new FindRequestManager(this));
|
| -
|
| - // Concurrent find sessions must not overlap, so destroy any existing
|
| - // FindRequestManagers in any inner WebContentses.
|
| - for (WebContentsImpl* contents : GetWebContentsAndAllInner()) {
|
| - if (contents == this)
|
| - continue;
|
| - if (contents->find_request_manager_) {
|
| - contents->find_request_manager_->StopFinding(
|
| - content::STOP_FIND_ACTION_CLEAR_SELECTION);
|
| - contents->find_request_manager_.release();
|
| - }
|
| - }
|
| + // TODO(paulmeyer): This method will need to access (or potentially create)
|
| + // the FindRequestManager in the outermost WebContents once find-in-page
|
| + // across GuestViews is implemented.
|
| + if (!find_request_manager_)
|
| + find_request_manager_.reset(new FindRequestManager(this));
|
|
|
| return find_request_manager_.get();
|
| }
|
| @@ -5373,12 +5280,6 @@ void WebContentsImpl::SetHasPersistentVideo(bool has_persistent_video) {
|
| media_web_contents_observer()->RequestPersistentVideo(has_persistent_video);
|
| }
|
|
|
| -void WebContentsImpl::BrowserPluginGuestWillDestroy() {
|
| - WebContentsImpl* outermost = GetOutermostWebContents();
|
| - if (this != outermost && ContainsOrIsFocusedWebContents())
|
| - outermost->SetAsFocusedWebContentsIfNecessary();
|
| -}
|
| -
|
| #if defined(OS_ANDROID)
|
| void WebContentsImpl::NotifyFindMatchRectsReply(
|
| int version,
|
|
|