| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 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 | 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 "components/subresource_filter/content/renderer/subresource_filter_agen
t.h" | 5 #include "components/subresource_filter/content/renderer/subresource_filter_agen
t.h" |
| 6 | 6 |
| 7 #include <vector> |
| 8 |
| 7 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/memory/ptr_util.h" |
| 8 #include "base/memory/ref_counted.h" | 11 #include "base/memory/ref_counted.h" |
| 9 #include "base/metrics/histogram_macros.h" | 12 #include "base/metrics/histogram_macros.h" |
| 10 #include "base/time/time.h" | 13 #include "base/time/time.h" |
| 11 #include "components/subresource_filter/content/common/document_subresource_filt
er.h" | |
| 12 #include "components/subresource_filter/content/common/subresource_filter_messag
es.h" | 14 #include "components/subresource_filter/content/common/subresource_filter_messag
es.h" |
| 13 #include "components/subresource_filter/content/renderer/unverified_ruleset_deal
er.h" | 15 #include "components/subresource_filter/content/renderer/unverified_ruleset_deal
er.h" |
| 16 #include "components/subresource_filter/content/renderer/web_document_subresourc
e_filter_impl.h" |
| 17 #include "components/subresource_filter/core/common/document_load_statistics.h" |
| 18 #include "components/subresource_filter/core/common/document_subresource_filter.
h" |
| 14 #include "components/subresource_filter/core/common/memory_mapped_ruleset.h" | 19 #include "components/subresource_filter/core/common/memory_mapped_ruleset.h" |
| 15 #include "components/subresource_filter/core/common/scoped_timers.h" | 20 #include "components/subresource_filter/core/common/scoped_timers.h" |
| 16 #include "components/subresource_filter/core/common/time_measurements.h" | 21 #include "components/subresource_filter/core/common/time_measurements.h" |
| 17 #include "content/public/common/browser_side_navigation_policy.h" | |
| 18 #include "content/public/renderer/render_frame.h" | 22 #include "content/public/renderer/render_frame.h" |
| 19 #include "ipc/ipc_message.h" | 23 #include "ipc/ipc_message.h" |
| 20 #include "third_party/WebKit/public/web/WebDataSource.h" | 24 #include "third_party/WebKit/public/web/WebDataSource.h" |
| 21 #include "third_party/WebKit/public/web/WebDocument.h" | 25 #include "third_party/WebKit/public/web/WebDocument.h" |
| 22 #include "third_party/WebKit/public/web/WebLocalFrame.h" | 26 #include "third_party/WebKit/public/web/WebLocalFrame.h" |
| 23 #include "url/gurl.h" | |
| 24 | 27 |
| 25 namespace subresource_filter { | 28 namespace subresource_filter { |
| 26 | 29 |
| 27 SubresourceFilterAgent::SubresourceFilterAgent( | 30 SubresourceFilterAgent::SubresourceFilterAgent( |
| 28 content::RenderFrame* render_frame, | 31 content::RenderFrame* render_frame, |
| 29 UnverifiedRulesetDealer* ruleset_dealer) | 32 UnverifiedRulesetDealer* ruleset_dealer) |
| 30 : content::RenderFrameObserver(render_frame), | 33 : content::RenderFrameObserver(render_frame), |
| 31 ruleset_dealer_(ruleset_dealer) { | 34 ruleset_dealer_(ruleset_dealer) { |
| 32 DCHECK(ruleset_dealer); | 35 DCHECK(ruleset_dealer); |
| 33 } | 36 } |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 81 static_cast<int>(ActivationLevel::LAST) + 1); | 84 static_cast<int>(ActivationLevel::LAST) + 1); |
| 82 | 85 |
| 83 if (activation_level_for_next_commit_ != ActivationLevel::DISABLED) { | 86 if (activation_level_for_next_commit_ != ActivationLevel::DISABLED) { |
| 84 UMA_HISTOGRAM_BOOLEAN("SubresourceFilter.DocumentLoad.RulesetIsAvailable", | 87 UMA_HISTOGRAM_BOOLEAN("SubresourceFilter.DocumentLoad.RulesetIsAvailable", |
| 85 ruleset_dealer_->IsRulesetFileAvailable()); | 88 ruleset_dealer_->IsRulesetFileAvailable()); |
| 86 } | 89 } |
| 87 } | 90 } |
| 88 | 91 |
| 89 void SubresourceFilterAgent::RecordHistogramsOnLoadFinished() { | 92 void SubresourceFilterAgent::RecordHistogramsOnLoadFinished() { |
| 90 DCHECK(filter_for_last_committed_load_); | 93 DCHECK(filter_for_last_committed_load_); |
| 91 const auto& statistics = filter_for_last_committed_load_->statistics(); | 94 const auto& statistics = |
| 95 filter_for_last_committed_load_->filter().statistics(); |
| 92 | 96 |
| 93 UMA_HISTOGRAM_COUNTS_1000( | 97 UMA_HISTOGRAM_COUNTS_1000( |
| 94 "SubresourceFilter.DocumentLoad.NumSubresourceLoads.Total", | 98 "SubresourceFilter.DocumentLoad.NumSubresourceLoads.Total", |
| 95 statistics.num_loads_total); | 99 statistics.num_loads_total); |
| 96 UMA_HISTOGRAM_COUNTS_1000( | 100 UMA_HISTOGRAM_COUNTS_1000( |
| 97 "SubresourceFilter.DocumentLoad.NumSubresourceLoads.Evaluated", | 101 "SubresourceFilter.DocumentLoad.NumSubresourceLoads.Evaluated", |
| 98 statistics.num_loads_evaluated); | 102 statistics.num_loads_evaluated); |
| 99 UMA_HISTOGRAM_COUNTS_1000( | 103 UMA_HISTOGRAM_COUNTS_1000( |
| 100 "SubresourceFilter.DocumentLoad.NumSubresourceLoads.MatchedRules", | 104 "SubresourceFilter.DocumentLoad.NumSubresourceLoads.MatchedRules", |
| 101 statistics.num_loads_matching_rules); | 105 statistics.num_loads_matching_rules); |
| 102 UMA_HISTOGRAM_COUNTS_1000( | 106 UMA_HISTOGRAM_COUNTS_1000( |
| 103 "SubresourceFilter.DocumentLoad.NumSubresourceLoads.Disallowed", | 107 "SubresourceFilter.DocumentLoad.NumSubresourceLoads.Disallowed", |
| 104 statistics.num_loads_disallowed); | 108 statistics.num_loads_disallowed); |
| 105 | 109 |
| 106 // If ThreadTicks is not supported or performance measuring is switched off, | 110 // If ThreadTicks is not supported or performance measuring is switched off, |
| 107 // then no time measurements have been collected. | 111 // then no time measurements have been collected. |
| 108 if (ScopedThreadTimers::IsSupported() && | 112 if (ScopedThreadTimers::IsSupported() && |
| 109 filter_for_last_committed_load_->is_performance_measuring_enabled()) { | 113 filter_for_last_committed_load_->filter() |
| 114 .activation_state() |
| 115 .measure_performance) { |
| 110 UMA_HISTOGRAM_CUSTOM_MICRO_TIMES( | 116 UMA_HISTOGRAM_CUSTOM_MICRO_TIMES( |
| 111 "SubresourceFilter.DocumentLoad.SubresourceEvaluation." | 117 "SubresourceFilter.DocumentLoad.SubresourceEvaluation." |
| 112 "TotalWallDuration", | 118 "TotalWallDuration", |
| 113 statistics.evaluation_total_wall_duration, | 119 statistics.evaluation_total_wall_duration, |
| 114 base::TimeDelta::FromMicroseconds(1), base::TimeDelta::FromSeconds(10), | 120 base::TimeDelta::FromMicroseconds(1), base::TimeDelta::FromSeconds(10), |
| 115 50); | 121 50); |
| 116 UMA_HISTOGRAM_CUSTOM_MICRO_TIMES( | 122 UMA_HISTOGRAM_CUSTOM_MICRO_TIMES( |
| 117 "SubresourceFilter.DocumentLoad.SubresourceEvaluation.TotalCPUDuration", | 123 "SubresourceFilter.DocumentLoad.SubresourceEvaluation.TotalCPUDuration", |
| 118 statistics.evaluation_total_cpu_duration, | 124 statistics.evaluation_total_cpu_duration, |
| 119 base::TimeDelta::FromMicroseconds(1), base::TimeDelta::FromSeconds(10), | 125 base::TimeDelta::FromMicroseconds(1), base::TimeDelta::FromSeconds(10), |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 154 SignalFirstSubresourceDisallowedForCommittedLoad, | 160 SignalFirstSubresourceDisallowedForCommittedLoad, |
| 155 AsWeakPtr())); | 161 AsWeakPtr())); |
| 156 | 162 |
| 157 auto ruleset = ruleset_dealer_->GetRuleset(); | 163 auto ruleset = ruleset_dealer_->GetRuleset(); |
| 158 DCHECK(ruleset); | 164 DCHECK(ruleset); |
| 159 ActivationState activation_state = | 165 ActivationState activation_state = |
| 160 ComputeActivationState(activation_level_for_next_commit_, | 166 ComputeActivationState(activation_level_for_next_commit_, |
| 161 measure_performance_for_next_commit_, | 167 measure_performance_for_next_commit_, |
| 162 ancestor_document_urls, ruleset.get()); | 168 ancestor_document_urls, ruleset.get()); |
| 163 DCHECK(!ancestor_document_urls.empty()); | 169 DCHECK(!ancestor_document_urls.empty()); |
| 164 std::unique_ptr<DocumentSubresourceFilter> filter( | 170 auto filter = base::MakeUnique<WebDocumentSubresourceFilterImpl>( |
| 165 new DocumentSubresourceFilter( | 171 url::Origin(ancestor_document_urls[0]), activation_state, |
| 166 url::Origin(ancestor_document_urls[0]), activation_state, | 172 std::move(ruleset), std::move(first_disallowed_load_callback)); |
| 167 std::move(ruleset), std::move(first_disallowed_load_callback))); | |
| 168 | 173 |
| 169 filter_for_last_committed_load_ = filter->AsWeakPtr(); | 174 filter_for_last_committed_load_ = filter->AsWeakPtr(); |
| 170 SetSubresourceFilterForCommittedLoad(std::move(filter)); | 175 SetSubresourceFilterForCommittedLoad(std::move(filter)); |
| 171 } | 176 } |
| 172 } | 177 } |
| 173 | 178 |
| 174 ResetActivatonStateForNextCommit(); | 179 ResetActivatonStateForNextCommit(); |
| 175 } | 180 } |
| 176 | 181 |
| 177 void SubresourceFilterAgent::DidFailProvisionalLoad( | 182 void SubresourceFilterAgent::DidFailProvisionalLoad( |
| 178 const blink::WebURLError& error) { | 183 const blink::WebURLError& error) { |
| 179 // TODO(engedy): Add a test with `frame-ancestor` violation to exercise this. | 184 // TODO(engedy): Add a test with `frame-ancestor` violation to exercise this. |
| 180 ResetActivatonStateForNextCommit(); | 185 ResetActivatonStateForNextCommit(); |
| 181 } | 186 } |
| 182 | 187 |
| 183 void SubresourceFilterAgent::DidFinishLoad() { | 188 void SubresourceFilterAgent::DidFinishLoad() { |
| 184 if (!filter_for_last_committed_load_) | 189 if (!filter_for_last_committed_load_) |
| 185 return; | 190 return; |
| 186 | |
| 187 RecordHistogramsOnLoadFinished(); | 191 RecordHistogramsOnLoadFinished(); |
| 188 } | 192 } |
| 189 | 193 |
| 190 bool SubresourceFilterAgent::OnMessageReceived(const IPC::Message& message) { | 194 bool SubresourceFilterAgent::OnMessageReceived(const IPC::Message& message) { |
| 191 bool handled = true; | 195 bool handled = true; |
| 192 IPC_BEGIN_MESSAGE_MAP(SubresourceFilterAgent, message) | 196 IPC_BEGIN_MESSAGE_MAP(SubresourceFilterAgent, message) |
| 193 IPC_MESSAGE_HANDLER(SubresourceFilterMsg_ActivateForNextCommittedLoad, | 197 IPC_MESSAGE_HANDLER(SubresourceFilterMsg_ActivateForNextCommittedLoad, |
| 194 OnActivateForNextCommittedLoad) | 198 OnActivateForNextCommittedLoad) |
| 195 IPC_MESSAGE_UNHANDLED(handled = false) | 199 IPC_MESSAGE_UNHANDLED(handled = false) |
| 196 IPC_END_MESSAGE_MAP() | 200 IPC_END_MESSAGE_MAP() |
| 197 return handled; | 201 return handled; |
| 198 } | 202 } |
| 199 | 203 |
| 200 } // namespace subresource_filter | 204 } // namespace subresource_filter |
| OLD | NEW |