Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(621)

Side by Side Diff: chrome/browser/loader/safe_browsing_resource_throttle.cc

Issue 2876473003: [ABANDONED] [WIP] Refactor SafeBrowsingResourceThrottle in preparation for WebSocket (Closed)
Patch Set: Minor fixes Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chrome/browser/loader/safe_browsing_resource_throttle.h ('k') | chrome/test/BUILD.gn » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/loader/safe_browsing_resource_throttle.h" 5 #include "chrome/browser/loader/safe_browsing_resource_throttle.h"
6 6
7 #include <iterator> 7 #include <iterator>
8 #include <utility> 8 #include <utility>
9 #include <vector>
9 10
11 #include "base/bind.h"
10 #include "base/logging.h" 12 #include "base/logging.h"
11 #include "base/trace_event/trace_event.h" 13 #include "base/memory/ptr_util.h"
12 #include "chrome/browser/prerender/prerender_contents.h" 14 #include "chrome/browser/prerender/prerender_contents.h"
13 #include "chrome/browser/safe_browsing/safe_browsing_service.h" 15 #include "chrome/browser/safe_browsing/safe_browsing_service.h"
16 #include "chrome/browser/safe_browsing/ui_manager.h"
14 #include "components/safe_browsing/base_ui_manager.h" 17 #include "components/safe_browsing/base_ui_manager.h"
15 #include "components/safe_browsing_db/util.h" 18 #include "components/safe_browsing/resource_throttle.h"
16 #include "components/safe_browsing_db/v4_feature_list.h"
17 #include "components/safe_browsing_db/v4_local_database_manager.h"
18 #include "components/security_interstitials/content/unsafe_resource.h" 19 #include "components/security_interstitials/content/unsafe_resource.h"
19 #include "components/subresource_filter/content/browser/content_subresource_filt er_driver_factory.h"
20 #include "content/public/browser/browser_thread.h" 20 #include "content/public/browser/browser_thread.h"
21 #include "content/public/browser/resource_request_info.h" 21 #include "content/public/browser/resource_request_info.h"
22 #include "content/public/browser/web_contents.h" 22 #include "content/public/browser/web_contents.h"
23 #include "net/url_request/redirect_info.h" 23 #include "net/url_request/redirect_info.h"
24 #include "net/url_request/url_request.h" 24 #include "net/url_request/url_request.h"
25 25
26 using safe_browsing::BaseUIManager; 26 using safe_browsing::BaseUIManager;
27 27
28 namespace { 28 namespace {
29 29
30 // Destroys the prerender contents associated with the web_contents, if any. 30 // Destroys the prerender contents associated with the web_contents, if any.
31 void DestroyPrerenderContents( 31 void DestroyPrerenderContents(
32 const content::ResourceRequestInfo::WebContentsGetter& 32 const content::ResourceRequestInfo::WebContentsGetter&
33 web_contents_getter) { 33 web_contents_getter) {
34 content::WebContents* web_contents = web_contents_getter.Run(); 34 content::WebContents* web_contents = web_contents_getter.Run();
35 if (web_contents) { 35 if (web_contents) {
36 prerender::PrerenderContents* prerender_contents = 36 prerender::PrerenderContents* prerender_contents =
37 prerender::PrerenderContents::FromWebContents(web_contents); 37 prerender::PrerenderContents::FromWebContents(web_contents);
38 if (prerender_contents) 38 if (prerender_contents)
39 prerender_contents->Destroy(prerender::FINAL_STATUS_SAFE_BROWSING); 39 prerender_contents->Destroy(prerender::FINAL_STATUS_SAFE_BROWSING);
40 } 40 }
41 } 41 }
42 42
43 } // namespace 43 void StartDisplayingBlockingPageOnUIThread(
44
45 // static
46 SafeBrowsingResourceThrottle* SafeBrowsingResourceThrottle::MaybeCreate(
47 net::URLRequest* request,
48 content::ResourceType resource_type,
49 safe_browsing::SafeBrowsingService* sb_service) {
50 if (sb_service->database_manager()->IsSupported()) {
51 return new SafeBrowsingResourceThrottle(request, resource_type, sb_service);
52 }
53 return nullptr;
54 }
55
56 SafeBrowsingResourceThrottle::SafeBrowsingResourceThrottle(
57 const net::URLRequest* request,
58 content::ResourceType resource_type,
59 safe_browsing::SafeBrowsingService* sb_service)
60 : safe_browsing::BaseResourceThrottle(request,
61 resource_type,
62 sb_service->database_manager(),
63 sb_service->ui_manager()) {}
64
65 SafeBrowsingResourceThrottle::~SafeBrowsingResourceThrottle() {}
66
67 const char* SafeBrowsingResourceThrottle::GetNameForLogging() const {
68 return "SafeBrowsingResourceThrottle";
69 }
70
71 void SafeBrowsingResourceThrottle::MaybeDestroyPrerenderContents(
72 const content::ResourceRequestInfo* info) {
73 // Destroy the prefetch with FINAL_STATUS_SAFEBROSWING.
74 content::BrowserThread::PostTask(
75 content::BrowserThread::UI, FROM_HERE,
76 base::BindOnce(&DestroyPrerenderContents,
77 info->GetWebContentsGetterForRequest()));
78 }
79
80 void SafeBrowsingResourceThrottle::StartDisplayingBlockingPageHelper(
81 security_interstitials::UnsafeResource resource) {
82 content::BrowserThread::PostTask(
83 content::BrowserThread::UI, FROM_HERE,
84 base::BindOnce(&SafeBrowsingResourceThrottle::StartDisplayingBlockingPage,
85 AsWeakPtr(), ui_manager(), resource));
86 }
87
88 // Static
89 void SafeBrowsingResourceThrottle::StartDisplayingBlockingPage(
90 const base::WeakPtr<safe_browsing::BaseResourceThrottle>& throttle,
91 scoped_refptr<BaseUIManager> ui_manager, 44 scoped_refptr<BaseUIManager> ui_manager,
92 const security_interstitials::UnsafeResource& resource) { 45 const security_interstitials::UnsafeResource& resource,
46 base::OnceClosure cancel_on_io_thread) {
93 content::WebContents* web_contents = resource.web_contents_getter.Run(); 47 content::WebContents* web_contents = resource.web_contents_getter.Run();
94 if (web_contents) { 48 if (web_contents) {
95 prerender::PrerenderContents* prerender_contents = 49 prerender::PrerenderContents* prerender_contents =
96 prerender::PrerenderContents::FromWebContents(web_contents); 50 prerender::PrerenderContents::FromWebContents(web_contents);
97 if (prerender_contents) { 51 if (prerender_contents) {
98 prerender_contents->Destroy(prerender::FINAL_STATUS_SAFE_BROWSING); 52 prerender_contents->Destroy(prerender::FINAL_STATUS_SAFE_BROWSING);
99 } else { 53 } else {
100 ui_manager->DisplayBlockingPage(resource); 54 ui_manager->DisplayBlockingPage(resource);
101 return; 55 return;
102 } 56 }
103 } 57 }
104 58
105 // Tab is gone or it's being prerendered. 59 // Tab is gone or it's being prerendered.
106 content::BrowserThread::PostTask( 60 content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE,
107 content::BrowserThread::IO, FROM_HERE, 61 std::move(cancel_on_io_thread));
108 base::BindOnce(&SafeBrowsingResourceThrottle::Cancel, throttle));
109 } 62 }
63
64 class SafeBrowsingResourceThrottleDelegate final
65 : public safe_browsing::ResourceThrottle::Delegate {
66 public:
67 SafeBrowsingResourceThrottleDelegate() {}
68 ~SafeBrowsingResourceThrottleDelegate() override {}
69
70 void MaybeDestroyPrerenderContents(
71 const WebContentsGetter& web_contents_getter) final {
72 // Destroy the prefetch with FINAL_STATUS_SAFEBROWSING.
73 content::BrowserThread::PostTask(
74 content::BrowserThread::UI, FROM_HERE,
75 base::BindOnce(&DestroyPrerenderContents, web_contents_getter));
76 }
77
78 void StartDisplayingBlockingPage(
79 const security_interstitials::UnsafeResource& resource,
80 scoped_refptr<BaseUIManager> ui_manager,
81 base::OnceClosure cancel_on_io_thread) final {
82 content::BrowserThread::PostTask(
83 content::BrowserThread::UI, FROM_HERE,
84 base::BindOnce(&StartDisplayingBlockingPageOnUIThread,
85 std::move(ui_manager), resource,
86 std::move(cancel_on_io_thread)));
87 }
88
89 private:
90 DISALLOW_COPY_AND_ASSIGN(SafeBrowsingResourceThrottleDelegate);
91 };
92
93 } // namespace
94
95 std::unique_ptr<content::ResourceThrottle>
96 MaybeCreateSafeBrowsingResourceThrottle(
97 net::URLRequest* request,
98 content::ResourceType resource_type,
99 safe_browsing::SafeBrowsingService* sb_service) {
100 if (!sb_service->database_manager()->IsSupported())
101 return nullptr;
102 return base::MakeUnique<safe_browsing::ResourceThrottle>(
103 request, resource_type, sb_service->database_manager(),
104 sb_service->ui_manager(),
105 base::MakeUnique<SafeBrowsingResourceThrottleDelegate>());
106 return nullptr;
107 }
OLDNEW
« no previous file with comments | « chrome/browser/loader/safe_browsing_resource_throttle.h ('k') | chrome/test/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698