| Index: components/subresource_filter/content/browser/content_subresource_filter_driver_factory.cc
|
| diff --git a/components/subresource_filter/content/browser/content_subresource_filter_driver_factory.cc b/components/subresource_filter/content/browser/content_subresource_filter_driver_factory.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..fba92220e314d13eca539c6d287c615e83b756f9
|
| --- /dev/null
|
| +++ b/components/subresource_filter/content/browser/content_subresource_filter_driver_factory.cc
|
| @@ -0,0 +1,85 @@
|
| +// Copyright 2016 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.
|
| +
|
| +#include "components/subresource_filter/content/browser/content_subresource_filter_driver_factory.h"
|
| +
|
| +#include "components/subresource_filter/content/browser/content_subresource_filter_driver.h"
|
| +#include "components/subresource_filter/core/browser/subresource_filter_features.h"
|
| +#include "content/public/browser/render_frame_host.h"
|
| +#include "content/public/browser/web_contents.h"
|
| +#include "url/gurl.h"
|
| +
|
| +namespace subresource_filter {
|
| +
|
| +// static
|
| +const char ContentSubresourceFilterDriverFactory::kWebContentsUserDataKey[] =
|
| + "web_contents_subresource_filter_driver_factory";
|
| +
|
| +// static
|
| +void ContentSubresourceFilterDriverFactory::CreateForWebContents(
|
| + content::WebContents* web_contents) {
|
| + if (FromWebContents(web_contents))
|
| + return;
|
| + web_contents->SetUserData(
|
| + kWebContentsUserDataKey,
|
| + new ContentSubresourceFilterDriverFactory(web_contents));
|
| +}
|
| +
|
| +// static
|
| +ContentSubresourceFilterDriverFactory*
|
| +ContentSubresourceFilterDriverFactory::FromWebContents(
|
| + content::WebContents* web_contents) {
|
| + return static_cast<ContentSubresourceFilterDriverFactory*>(
|
| + web_contents->GetUserData(kWebContentsUserDataKey));
|
| +}
|
| +
|
| +ContentSubresourceFilterDriverFactory::ContentSubresourceFilterDriverFactory(
|
| + content::WebContents* web_contents)
|
| + : content::WebContentsObserver(web_contents) {
|
| + content::RenderFrameHost* main_frame_host = web_contents->GetMainFrame();
|
| + if (main_frame_host && main_frame_host->IsRenderFrameLive())
|
| + CreateDriverForFrameHostIfNeeded(main_frame_host);
|
| +}
|
| +
|
| +ContentSubresourceFilterDriverFactory::
|
| + ~ContentSubresourceFilterDriverFactory() {}
|
| +
|
| +void ContentSubresourceFilterDriverFactory::CreateDriverForFrameHostIfNeeded(
|
| + content::RenderFrameHost* render_frame_host) {
|
| + auto iterator_and_inserted =
|
| + frame_drivers_.insert(std::make_pair(render_frame_host, nullptr));
|
| + if (iterator_and_inserted.second) {
|
| + iterator_and_inserted.first->second.reset(
|
| + new ContentSubresourceFilterDriver(render_frame_host));
|
| + }
|
| +}
|
| +
|
| +ContentSubresourceFilterDriver*
|
| +ContentSubresourceFilterDriverFactory::DriverFromFrameHost(
|
| + content::RenderFrameHost* render_frame_host) {
|
| + auto iterator = frame_drivers_.find(render_frame_host);
|
| + return iterator == frame_drivers_.end() ? nullptr : iterator->second.get();
|
| +}
|
| +
|
| +void ContentSubresourceFilterDriverFactory::RenderFrameCreated(
|
| + content::RenderFrameHost* render_frame_host) {
|
| + CreateDriverForFrameHostIfNeeded(render_frame_host);
|
| +}
|
| +
|
| +void ContentSubresourceFilterDriverFactory::RenderFrameDeleted(
|
| + content::RenderFrameHost* render_frame_host) {
|
| + frame_drivers_.erase(render_frame_host);
|
| +}
|
| +
|
| +void ContentSubresourceFilterDriverFactory::DidStartProvisionalLoadForFrame(
|
| + content::RenderFrameHost* render_frame_host,
|
| + const GURL& validated_url,
|
| + bool is_error_page,
|
| + bool is_iframe_srcdoc) {
|
| + // TODO(melandory): Replace placeholder with actual activation logic.
|
| + DriverFromFrameHost(render_frame_host)
|
| + ->ActivateForProvisionalLoad(GetMaximumActivationState());
|
| +}
|
| +
|
| +} // namespace subresource_filter
|
|
|