Move ownership of WebFramesManagerImpl to WebState
Moves the ownership of WebFramesManagerImpl instances from a WebStateUserData Container to being owned by the realized web state directly. Bug: 1380918 Change-Id: I2dc8ec7c2f742ce10087732dd945252019b94062 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4301709 Reviewed-by: Ali Juma <ajuma@chromium.org> Commit-Queue: Mike Dougherty <michaeldo@chromium.org> Cr-Commit-Position: refs/heads/main@{#1111939}
This commit is contained in:

committed by
Chromium LUCI CQ

parent
5f3759cc99
commit
0164fe22ba
@ -11,26 +11,18 @@
|
||||
|
||||
#import "base/memory/weak_ptr.h"
|
||||
#import "base/observer_list.h"
|
||||
#import "ios/web/public/js_messaging/content_world.h"
|
||||
#import "ios/web/public/web_state_user_data.h"
|
||||
|
||||
namespace web {
|
||||
class WebFrame;
|
||||
class WebState;
|
||||
|
||||
class WebFramesManagerImpl : public WebFramesManager {
|
||||
public:
|
||||
// Returns the web frames manager for `web_state` and `content_world`.
|
||||
// `content_world` must specify a specific content world so
|
||||
// `kAllContentWorlds` is not a valid value.
|
||||
static WebFramesManagerImpl& FromWebState(web::WebState* web_state,
|
||||
ContentWorld content_world);
|
||||
explicit WebFramesManagerImpl();
|
||||
~WebFramesManagerImpl() override;
|
||||
|
||||
WebFramesManagerImpl(const WebFramesManagerImpl&) = delete;
|
||||
WebFramesManagerImpl& operator=(const WebFramesManagerImpl&) = delete;
|
||||
|
||||
~WebFramesManagerImpl() override;
|
||||
|
||||
// Adds `frame` to the list of web frames. A frame with the same frame ID must
|
||||
// not already be registered). Returns `false` and `frame` will be ignored if
|
||||
// `frame` is a main frame and a main frame has already been set.
|
||||
@ -48,28 +40,6 @@ class WebFramesManagerImpl : public WebFramesManager {
|
||||
WebFrame* GetFrameWithId(const std::string& frame_id) override;
|
||||
|
||||
private:
|
||||
// Container that stores the web frame manager for each content world.
|
||||
// Usage example:
|
||||
//
|
||||
// WebFramesManagerImpl::Container::FromWebState(web_state)->
|
||||
// ManagerForContentWorld(ContentWorld::kPageContentWorld);
|
||||
class Container : public web::WebStateUserData<Container> {
|
||||
public:
|
||||
~Container() override;
|
||||
// Returns the web frames manager for `content_world`.
|
||||
WebFramesManagerImpl& ManagerForContentWorld(ContentWorld content_world);
|
||||
|
||||
private:
|
||||
friend class web::WebStateUserData<Container>;
|
||||
WEB_STATE_USER_DATA_KEY_DECL();
|
||||
Container(web::WebState* web_state);
|
||||
|
||||
web::WebState* web_state_ = nullptr;
|
||||
std::map<ContentWorld, std::unique_ptr<WebFramesManagerImpl>> managers_;
|
||||
};
|
||||
|
||||
explicit WebFramesManagerImpl();
|
||||
|
||||
// List of pointers to all web frames.
|
||||
std::map<std::string, std::unique_ptr<WebFrame>> web_frames_;
|
||||
|
||||
|
@ -15,35 +15,8 @@
|
||||
|
||||
namespace web {
|
||||
|
||||
#pragma mark - WebFramesManagerImpl::Container
|
||||
|
||||
WEB_STATE_USER_DATA_KEY_IMPL(WebFramesManagerImpl::Container)
|
||||
|
||||
WebFramesManagerImpl::Container::Container(web::WebState* web_state)
|
||||
: web_state_(web_state) {}
|
||||
WebFramesManagerImpl::Container::~Container() = default;
|
||||
|
||||
WebFramesManagerImpl& WebFramesManagerImpl::Container::ManagerForContentWorld(
|
||||
ContentWorld content_world) {
|
||||
DCHECK_NE(content_world, ContentWorld::kAllContentWorlds);
|
||||
|
||||
auto& manager = managers_[content_world];
|
||||
if (!manager) {
|
||||
manager = base::WrapUnique(new WebFramesManagerImpl());
|
||||
}
|
||||
return *manager.get();
|
||||
}
|
||||
|
||||
#pragma mark - WebFramesManagerImpl
|
||||
|
||||
WebFramesManagerImpl& WebFramesManagerImpl::FromWebState(
|
||||
web::WebState* web_state,
|
||||
ContentWorld content_world) {
|
||||
WebFramesManagerImpl::Container::CreateForWebState(web_state);
|
||||
return WebFramesManagerImpl::Container::FromWebState(web_state)
|
||||
->ManagerForContentWorld(content_world);
|
||||
}
|
||||
|
||||
WebFramesManagerImpl::WebFramesManagerImpl() : weak_factory_(this) {}
|
||||
|
||||
WebFramesManagerImpl::~WebFramesManagerImpl() = default;
|
||||
|
@ -5,12 +5,16 @@
|
||||
#ifndef IOS_WEB_WEB_STATE_WEB_STATE_IMPL_REALIZED_WEB_STATE_H_
|
||||
#define IOS_WEB_WEB_STATE_WEB_STATE_IMPL_REALIZED_WEB_STATE_H_
|
||||
|
||||
#include <map>
|
||||
|
||||
#import "ios/web/web_state/web_state_impl.h"
|
||||
|
||||
#import "ios/web/public/js_messaging/content_world.h"
|
||||
#import "ios/web/public/web_state_observer.h"
|
||||
|
||||
namespace web {
|
||||
|
||||
class WebFramesManagerImpl;
|
||||
class WebUIIOS;
|
||||
|
||||
// Internal implementation of a realized WebStateImpl.
|
||||
@ -55,10 +59,14 @@ class WebStateImpl::RealizedWebState final : public NavigationManagerDelegate {
|
||||
const NavigationManagerImpl& GetNavigationManager() const;
|
||||
NavigationManagerImpl& GetNavigationManager();
|
||||
|
||||
// Returns the WebFrameManagerImpl associated with the owning WebStateImpl.
|
||||
const WebFramesManagerImpl& GetPageWorldWebFramesManager() const;
|
||||
// Returns the WebFrameManagerImpl associated with the owning WebStateImpl for
|
||||
// the page content world.
|
||||
WebFramesManagerImpl& GetPageWorldWebFramesManager();
|
||||
|
||||
// Returns the WebFrameManagerImpl associated with the owning WebStateImpl for
|
||||
// the given `world`.
|
||||
WebFramesManagerImpl& GetWebFramesManager(ContentWorld world);
|
||||
|
||||
// Returns the SessionCertificationPolicyCacheImpl associated with the owning
|
||||
// WebStateImpl.
|
||||
const SessionCertificatePolicyCacheImpl& GetSessionCertificatePolicyCache()
|
||||
@ -304,6 +312,9 @@ class WebStateImpl::RealizedWebState final : public NavigationManagerDelegate {
|
||||
|
||||
// The fake CRWWebViewNavigationProxy used for testing. Nil in production.
|
||||
__strong id<CRWWebViewNavigationProxy> web_view_for_testing_;
|
||||
|
||||
// A map which stores the web frame manager for each content world.
|
||||
std::map<ContentWorld, std::unique_ptr<WebFramesManagerImpl>> managers_;
|
||||
};
|
||||
|
||||
} // namespace web
|
||||
|
@ -150,16 +150,19 @@ NavigationManagerImpl& WebStateImpl::RealizedWebState::GetNavigationManager() {
|
||||
return *navigation_manager_;
|
||||
}
|
||||
|
||||
const WebFramesManagerImpl&
|
||||
WebStateImpl::RealizedWebState::GetPageWorldWebFramesManager() const {
|
||||
return WebFramesManagerImpl::FromWebState(owner_,
|
||||
ContentWorld::kPageContentWorld);
|
||||
}
|
||||
|
||||
WebFramesManagerImpl&
|
||||
WebStateImpl::RealizedWebState::GetPageWorldWebFramesManager() {
|
||||
return WebFramesManagerImpl::FromWebState(owner_,
|
||||
ContentWorld::kPageContentWorld);
|
||||
return GetWebFramesManager(ContentWorld::kPageContentWorld);
|
||||
}
|
||||
|
||||
WebFramesManagerImpl& WebStateImpl::RealizedWebState::GetWebFramesManager(
|
||||
ContentWorld world) {
|
||||
DCHECK_NE(world, ContentWorld::kAllContentWorlds);
|
||||
|
||||
if (!managers_[world]) {
|
||||
managers_[world] = base::WrapUnique(new WebFramesManagerImpl());
|
||||
}
|
||||
return *managers_[world].get();
|
||||
}
|
||||
|
||||
const SessionCertificatePolicyCacheImpl&
|
||||
|
Reference in New Issue
Block a user