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

Side by Side Diff: components/subresource_filter/content/browser/subresource_filter_safe_browsing_client_request.cc

Issue 2834543003: [subresource_filter] SB throttle can send multiple speculative requests. (Closed)
Patch Set: Add NoRedirectSpeculation metric Created 3 years, 7 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
OLDNEW
(Empty)
1 // Copyright 2017 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/subresource_filter_safe_ browsing_client_request.h"
6
7 #include <utility>
8
9 #include "base/bind.h"
10 #include "base/bind_helpers.h"
11 #include "base/location.h"
12 #include "base/logging.h"
13 #include "base/metrics/histogram_macros.h"
14 #include "base/single_thread_task_runner.h"
15 #include "components/subresource_filter/content/browser/subresource_filter_safe_ browsing_client.h"
16 #include "content/public/browser/browser_thread.h"
17
18 namespace subresource_filter {
19
20 constexpr base::TimeDelta
21 SubresourceFilterSafeBrowsingClientRequest::kCheckURLTimeout;
22
23 SubresourceFilterSafeBrowsingClientRequest::
24 SubresourceFilterSafeBrowsingClientRequest(
25 const GURL& url,
26 size_t request_id,
27 scoped_refptr<safe_browsing::SafeBrowsingDatabaseManager>
28 database_manager,
29 scoped_refptr<base::SingleThreadTaskRunner> io_task_runner,
30 SubresourceFilterSafeBrowsingClient* client)
31 : url_(url),
32 request_id_(request_id),
33 database_manager_(std::move(database_manager)),
34 client_(client) {
35 DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
36 timer_.SetTaskRunner(std::move(io_task_runner));
37 }
38
39 SubresourceFilterSafeBrowsingClientRequest::
40 ~SubresourceFilterSafeBrowsingClientRequest() {
41 DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
42 if (!request_completed_)
43 database_manager_->CancelCheck(this);
44 timer_.Stop();
45 }
46
47 void SubresourceFilterSafeBrowsingClientRequest::Start() {
48 DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
49 start_time_ = base::TimeTicks::Now();
50 if (database_manager_->CheckUrlForSubresourceFilter(url_, this)) {
51 SendCheckResultToClient(false /* served_from_network */,
52 safe_browsing::SB_THREAT_TYPE_SAFE,
53 safe_browsing::ThreatMetadata());
54 return;
55 }
56 timer_.Start(
57 FROM_HERE, kCheckURLTimeout,
58 base::Bind(&SubresourceFilterSafeBrowsingClientRequest::OnCheckUrlTimeout,
59 base::Unretained(this)));
60 }
61
62 void SubresourceFilterSafeBrowsingClientRequest::OnCheckBrowseUrlResult(
63 const GURL& url,
64 safe_browsing::SBThreatType threat_type,
65 const safe_browsing::ThreatMetadata& metadata) {
66 DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
67 DCHECK_EQ(url_, url);
68 request_completed_ = true;
69 SendCheckResultToClient(true /* served_from_network */, threat_type,
70 metadata);
71 }
72
73 void SubresourceFilterSafeBrowsingClientRequest::OnCheckUrlTimeout() {
74 DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
75 SendCheckResultToClient(true /* served_from_network */,
76 safe_browsing::SB_THREAT_TYPE_SAFE,
77 safe_browsing::ThreatMetadata());
78 }
79
80 void SubresourceFilterSafeBrowsingClientRequest::SendCheckResultToClient(
81 bool served_from_network,
82 safe_browsing::SBThreatType threat_type,
83 const safe_browsing::ThreatMetadata& metadata) {
84 SubresourceFilterSafeBrowsingClient::CheckResult result;
85 result.request_id = request_id_;
86 result.threat_type = threat_type;
87 result.pattern_type = metadata.threat_pattern_type;
88 result.check_time = base::TimeTicks::Now() - start_time_;
89
90 // This memeber is separate from |request_completed_|, in that it just
91 // indicates that this request is done processing (due to completion or
92 // timeout).
93 result.finished = true;
94
95 UMA_HISTOGRAM_TIMES("SubresourceFilter.SafeBrowsing.CheckTime",
96 result.check_time);
97 // Will delete |this|.
98 client_->OnCheckBrowseUrlResult(this, result);
99 }
100
101 } // namespace subresource_filter
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698