OLD | NEW |
(Empty) | |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "components/subresource_filter/content/browser/content_subresource_filt
er_driver_factory.h" |
| 6 |
| 7 #include "components/subresource_filter/content/browser/content_subresource_filt
er_driver.h" |
| 8 #include "components/subresource_filter/core/browser/subresource_filter_features
.h" |
| 9 #include "content/public/browser/render_frame_host.h" |
| 10 #include "content/public/browser/web_contents.h" |
| 11 #include "url/gurl.h" |
| 12 |
| 13 namespace subresource_filter { |
| 14 |
| 15 // static |
| 16 const char ContentSubresourceFilterDriverFactory::kWebContentsUserDataKey[] = |
| 17 "web_contents_subresource_filter_driver_factory"; |
| 18 |
| 19 // static |
| 20 void ContentSubresourceFilterDriverFactory::CreateForWebContents( |
| 21 content::WebContents* web_contents) { |
| 22 if (FromWebContents(web_contents)) |
| 23 return; |
| 24 web_contents->SetUserData( |
| 25 kWebContentsUserDataKey, |
| 26 new ContentSubresourceFilterDriverFactory(web_contents)); |
| 27 } |
| 28 |
| 29 // static |
| 30 ContentSubresourceFilterDriverFactory* |
| 31 ContentSubresourceFilterDriverFactory::FromWebContents( |
| 32 content::WebContents* web_contents) { |
| 33 return static_cast<ContentSubresourceFilterDriverFactory*>( |
| 34 web_contents->GetUserData(kWebContentsUserDataKey)); |
| 35 } |
| 36 |
| 37 ContentSubresourceFilterDriverFactory::ContentSubresourceFilterDriverFactory( |
| 38 content::WebContents* web_contents) |
| 39 : content::WebContentsObserver(web_contents) { |
| 40 content::RenderFrameHost* main_frame_host = web_contents->GetMainFrame(); |
| 41 if (main_frame_host && main_frame_host->IsRenderFrameLive()) |
| 42 CreateDriverForFrameHostIfNeeded(main_frame_host); |
| 43 } |
| 44 |
| 45 ContentSubresourceFilterDriverFactory:: |
| 46 ~ContentSubresourceFilterDriverFactory() {} |
| 47 |
| 48 void ContentSubresourceFilterDriverFactory::CreateDriverForFrameHostIfNeeded( |
| 49 content::RenderFrameHost* render_frame_host) { |
| 50 auto iterator_and_inserted = |
| 51 frame_drivers_.insert(std::make_pair(render_frame_host, nullptr)); |
| 52 if (iterator_and_inserted.second) { |
| 53 iterator_and_inserted.first->second.reset( |
| 54 new ContentSubresourceFilterDriver(render_frame_host)); |
| 55 } |
| 56 } |
| 57 |
| 58 ContentSubresourceFilterDriver* |
| 59 ContentSubresourceFilterDriverFactory::DriverFromFrameHost( |
| 60 content::RenderFrameHost* render_frame_host) { |
| 61 auto iterator = frame_drivers_.find(render_frame_host); |
| 62 return iterator == frame_drivers_.end() ? nullptr : iterator->second.get(); |
| 63 } |
| 64 |
| 65 void ContentSubresourceFilterDriverFactory::RenderFrameCreated( |
| 66 content::RenderFrameHost* render_frame_host) { |
| 67 CreateDriverForFrameHostIfNeeded(render_frame_host); |
| 68 } |
| 69 |
| 70 void ContentSubresourceFilterDriverFactory::RenderFrameDeleted( |
| 71 content::RenderFrameHost* render_frame_host) { |
| 72 frame_drivers_.erase(render_frame_host); |
| 73 } |
| 74 |
| 75 void ContentSubresourceFilterDriverFactory::DidStartProvisionalLoadForFrame( |
| 76 content::RenderFrameHost* render_frame_host, |
| 77 const GURL& validated_url, |
| 78 bool is_error_page, |
| 79 bool is_iframe_srcdoc) { |
| 80 // TODO(melandory): Replace placeholder with actual activation logic. |
| 81 DriverFromFrameHost(render_frame_host) |
| 82 ->ActivateForProvisionalLoad(GetMaximumActivationState()); |
| 83 } |
| 84 |
| 85 } // namespace subresource_filter |
OLD | NEW |