 Chromium Code Reviews
 Chromium Code Reviews Issue 2900563002:
  Network service: Safe browsing check for sub-resources from renderer.  (Closed)
    
  
    Issue 2900563002:
  Network service: Safe browsing check for sub-resources from renderer.  (Closed) 
  | Index: chrome/renderer/chrome_content_renderer_client.cc | 
| diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer/chrome_content_renderer_client.cc | 
| index 51e8e616838f365f3447c388de5b5f6caa004056..28a60f32b7a5bf2464b8763aa25134b55fca4536 100644 | 
| --- a/chrome/renderer/chrome_content_renderer_client.cc | 
| +++ b/chrome/renderer/chrome_content_renderer_client.cc | 
| @@ -57,6 +57,7 @@ | 
| #include "chrome/renderer/prerender/prerender_helper.h" | 
| #include "chrome/renderer/prerender/prerenderer_client.h" | 
| #include "chrome/renderer/safe_browsing/phishing_classifier_delegate.h" | 
| +#include "chrome/renderer/safe_browsing/safe_browsing_url_loader_throttle.h" | 
| #include "chrome/renderer/searchbox/search_bouncer.h" | 
| #include "chrome/renderer/searchbox/searchbox.h" | 
| #include "chrome/renderer/searchbox/searchbox_extension.h" | 
| @@ -106,6 +107,7 @@ | 
| #include "ppapi/shared_impl/ppapi_switches.h" | 
| #include "printing/features/features.h" | 
| #include "services/service_manager/public/cpp/connector.h" | 
| +#include "services/service_manager/public/cpp/interface_provider.h" | 
| #include "third_party/WebKit/public/platform/URLConversion.h" | 
| #include "third_party/WebKit/public/platform/WebCache.h" | 
| #include "third_party/WebKit/public/platform/WebCachePolicy.h" | 
| @@ -344,6 +346,9 @@ void OnModuleEvent(scoped_refptr<base::SingleThreadTaskRunner> io_task_runner, | 
| } // namespace | 
| +ChromeContentRendererClient::FrameData::FrameData() = default; | 
| +ChromeContentRendererClient::FrameData::~FrameData() = default; | 
| + | 
| ChromeContentRendererClient::ChromeContentRendererClient() | 
| : main_entry_time_(base::TimeTicks::Now()) { | 
| #if BUILDFLAG(ENABLE_EXTENSIONS) | 
| @@ -494,7 +499,7 @@ void ChromeContentRendererClient::RenderThreadStarted() { | 
| void ChromeContentRendererClient::RenderFrameCreated( | 
| content::RenderFrame* render_frame) { | 
| - new ChromeRenderFrameObserver(render_frame); | 
| + new ChromeRenderFrameObserver(this, render_frame); | 
| bool should_whitelist_for_content_settings = | 
| base::CommandLine::ForCurrentProcess()->HasSwitch( | 
| @@ -1194,7 +1199,8 @@ bool ChromeContentRendererClient::WillSendRequest( | 
| WebLocalFrame* frame, | 
| ui::PageTransition transition_type, | 
| const blink::WebURL& url, | 
| - GURL* new_url) { | 
| + GURL* new_url, | 
| + std::vector<std::unique_ptr<content::URLLoaderThrottle>>* throttles) { | 
| // Check whether the request should be allowed. If not allowed, we reset the | 
| // URL to something invalid to prevent the request and cause an error. | 
| #if BUILDFLAG(ENABLE_EXTENSIONS) | 
| @@ -1204,6 +1210,23 @@ bool ChromeContentRendererClient::WillSendRequest( | 
| } | 
| #endif | 
| + if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 
| + switches::kEnableNetworkService)) { | 
| + RenderFrame* render_frame = content::RenderFrame::FromWebFrame(frame); | 
| + auto& frame_data = frame_data_map_[render_frame]; | 
| + if (!frame_data.safe_browsing) { | 
| + render_frame->GetRemoteInterfaces()->GetInterface( | 
| + &frame_data.safe_browsing); | 
| + } | 
| + | 
| + // TODO(yzshen): Is it safe to assume that all URL requests will be aborted | 
| + // before the render frame goes away? Because that is when | 
| + // |frame_data.safe_browsing| goes away. | 
| 
kinuko
2017/05/25 11:30:57
This is actually not true (or not going to be true
 
yzshen1
2017/05/26 20:43:52
Since URL loads may not always associated with ren
 | 
| + throttles->push_back( | 
| + base::MakeUnique<safe_browsing::SafeBrowsingURLLoaderThrottle>( | 
| + frame_data.safe_browsing.get())); | 
| + } | 
| + | 
| if (!url.ProtocolIs(chrome::kChromeSearchScheme)) | 
| return false; | 
| @@ -1578,3 +1601,8 @@ ChromeContentRendererClient::GetTaskSchedulerInitParams() { | 
| return task_scheduler_util:: | 
| GetRendererTaskSchedulerInitParamsFromCommandLine(); | 
| } | 
| + | 
| +void ChromeContentRendererClient::OnRenderFrameDestruct( | 
| + content::RenderFrame* frame) { | 
| + frame_data_map_.erase(frame); | 
| +} |