| OLD | NEW |
| 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/extensions/api/web_request/web_request_api.h" | 5 #include "chrome/browser/extensions/api/web_request/web_request_api.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/bind_helpers.h" |
| 10 #include "base/json/json_writer.h" | 11 #include "base/json/json_writer.h" |
| 11 #include "base/metrics/histogram.h" | 12 #include "base/metrics/histogram.h" |
| 12 #include "base/string_number_conversions.h" | 13 #include "base/string_number_conversions.h" |
| 13 #include "base/string_util.h" | 14 #include "base/string_util.h" |
| 14 #include "base/time.h" | 15 #include "base/time.h" |
| 15 #include "base/utf_string_conversions.h" | 16 #include "base/utf_string_conversions.h" |
| 16 #include "base/values.h" | 17 #include "base/values.h" |
| 17 #include "chrome/browser/browser_process.h" | 18 #include "chrome/browser/browser_process.h" |
| 18 #include "chrome/browser/chrome_content_browser_client.h" | 19 #include "chrome/browser/chrome_content_browser_client.h" |
| 19 #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_rule.h
" | 20 #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_rule.h
" |
| 20 #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_
registry.h" | 21 #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_
registry.h" |
| 21 #include "chrome/browser/extensions/api/web_navigation/web_navigation_api_helper
s.h" | 22 #include "chrome/browser/extensions/api/web_navigation/web_navigation_api_helper
s.h" |
| 22 #include "chrome/browser/extensions/api/web_request/web_request_api_constants.h" | 23 #include "chrome/browser/extensions/api/web_request/web_request_api_constants.h" |
| 23 #include "chrome/browser/extensions/api/web_request/web_request_api_helpers.h" | 24 #include "chrome/browser/extensions/api/web_request/web_request_api_helpers.h" |
| 24 #include "chrome/browser/extensions/api/web_request/web_request_time_tracker.h" | 25 #include "chrome/browser/extensions/api/web_request/web_request_time_tracker.h" |
| 25 #include "chrome/browser/extensions/event_router.h" | 26 #include "chrome/browser/extensions/event_router.h" |
| 26 #include "chrome/browser/extensions/extension_info_map.h" | 27 #include "chrome/browser/extensions/extension_info_map.h" |
| 27 #include "chrome/browser/extensions/extension_prefs.h" | 28 #include "chrome/browser/extensions/extension_prefs.h" |
| 28 #include "chrome/browser/extensions/extension_service.h" | 29 #include "chrome/browser/extensions/extension_service.h" |
| 29 #include "chrome/browser/extensions/extension_tab_id_map.h" | 30 #include "chrome/browser/extensions/extension_tab_id_map.h" |
| 31 #include "chrome/browser/extensions/extension_warning_set.h" |
| 30 #include "chrome/browser/profiles/profile.h" | 32 #include "chrome/browser/profiles/profile.h" |
| 31 #include "chrome/browser/profiles/profile_manager.h" | 33 #include "chrome/browser/profiles/profile_manager.h" |
| 32 #include "chrome/browser/renderer_host/chrome_render_message_filter.h" | 34 #include "chrome/browser/renderer_host/chrome_render_message_filter.h" |
| 33 #include "chrome/common/extensions/api/web_request.h" | 35 #include "chrome/common/extensions/api/web_request.h" |
| 34 #include "chrome/common/extensions/event_filtering_info.h" | 36 #include "chrome/common/extensions/event_filtering_info.h" |
| 35 #include "chrome/common/extensions/extension.h" | 37 #include "chrome/common/extensions/extension.h" |
| 36 #include "chrome/common/extensions/extension_constants.h" | 38 #include "chrome/common/extensions/extension_constants.h" |
| 37 #include "chrome/common/extensions/extension_error_utils.h" | 39 #include "chrome/common/extensions/extension_error_utils.h" |
| 38 #include "chrome/common/extensions/extension_messages.h" | 40 #include "chrome/common/extensions/extension_messages.h" |
| 39 #include "chrome/common/extensions/url_pattern.h" | 41 #include "chrome/common/extensions/url_pattern.h" |
| 40 #include "chrome/common/url_constants.h" | 42 #include "chrome/common/url_constants.h" |
| 41 #include "content/public/browser/browser_message_filter.h" | 43 #include "content/public/browser/browser_message_filter.h" |
| 42 #include "content/public/browser/browser_thread.h" | 44 #include "content/public/browser/browser_thread.h" |
| 43 #include "content/public/browser/render_process_host.h" | 45 #include "content/public/browser/render_process_host.h" |
| 44 #include "content/public/browser/resource_request_info.h" | 46 #include "content/public/browser/resource_request_info.h" |
| 45 #include "googleurl/src/gurl.h" | 47 #include "googleurl/src/gurl.h" |
| 46 #include "grit/generated_resources.h" | 48 #include "grit/generated_resources.h" |
| 47 #include "net/base/auth.h" | 49 #include "net/base/auth.h" |
| 48 #include "net/base/net_errors.h" | 50 #include "net/base/net_errors.h" |
| 49 #include "net/http/http_response_headers.h" | 51 #include "net/http/http_response_headers.h" |
| 50 #include "net/url_request/url_request.h" | 52 #include "net/url_request/url_request.h" |
| 51 #include "ui/base/l10n/l10n_util.h" | 53 #include "ui/base/l10n/l10n_util.h" |
| 52 | 54 |
| 53 using content::BrowserMessageFilter; | 55 using content::BrowserMessageFilter; |
| 54 using content::BrowserThread; | 56 using content::BrowserThread; |
| 55 using content::ResourceRequestInfo; | 57 using content::ResourceRequestInfo; |
| 56 using extensions::Extension; | 58 using extensions::Extension; |
| 59 using extensions::ExtensionWarning; |
| 60 using extensions::ExtensionWarningService; |
| 61 using extensions::ExtensionWarningSet; |
| 57 | 62 |
| 58 using extensions::web_navigation_api_helpers::GetFrameId; | 63 using extensions::web_navigation_api_helpers::GetFrameId; |
| 59 | 64 |
| 60 namespace helpers = extension_web_request_api_helpers; | 65 namespace helpers = extension_web_request_api_helpers; |
| 61 namespace keys = extension_web_request_api_constants; | 66 namespace keys = extension_web_request_api_constants; |
| 62 namespace web_request = extensions::api::web_request; | 67 namespace web_request = extensions::api::web_request; |
| 63 | 68 |
| 64 namespace { | 69 namespace { |
| 65 | 70 |
| 66 // List of all the webRequest events. | 71 // List of all the webRequest events. |
| (...skipping 1251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1318 BlockedRequest& blocked_request = blocked_requests_[request_id]; | 1323 BlockedRequest& blocked_request = blocked_requests_[request_id]; |
| 1319 CHECK(blocked_request.num_handlers_blocking == 0); | 1324 CHECK(blocked_request.num_handlers_blocking == 0); |
| 1320 helpers::EventResponseDeltas& deltas = blocked_request.response_deltas; | 1325 helpers::EventResponseDeltas& deltas = blocked_request.response_deltas; |
| 1321 base::TimeDelta block_time = | 1326 base::TimeDelta block_time = |
| 1322 base::Time::Now() - blocked_request.blocking_time; | 1327 base::Time::Now() - blocked_request.blocking_time; |
| 1323 request_time_tracker_->IncrementTotalBlockTime(request_id, block_time); | 1328 request_time_tracker_->IncrementTotalBlockTime(request_id, block_time); |
| 1324 | 1329 |
| 1325 bool credentials_set = false; | 1330 bool credentials_set = false; |
| 1326 | 1331 |
| 1327 deltas.sort(&helpers::InDecreasingExtensionInstallationTimeOrder); | 1332 deltas.sort(&helpers::InDecreasingExtensionInstallationTimeOrder); |
| 1328 std::set<std::string> conflicting_extensions; | 1333 ExtensionWarningSet warnings; |
| 1329 | 1334 |
| 1330 bool canceled = false; | 1335 bool canceled = false; |
| 1331 helpers::MergeCancelOfResponses( | 1336 helpers::MergeCancelOfResponses( |
| 1332 blocked_request.response_deltas, | 1337 blocked_request.response_deltas, |
| 1333 &canceled, | 1338 &canceled, |
| 1334 blocked_request.net_log); | 1339 blocked_request.net_log); |
| 1335 | 1340 |
| 1336 if (blocked_request.event == kOnBeforeRequest) { | 1341 if (blocked_request.event == kOnBeforeRequest) { |
| 1337 CHECK(!blocked_request.callback.is_null()); | 1342 CHECK(!blocked_request.callback.is_null()); |
| 1338 helpers::MergeOnBeforeRequestResponses( | 1343 helpers::MergeOnBeforeRequestResponses( |
| 1339 blocked_request.response_deltas, | 1344 blocked_request.response_deltas, |
| 1340 blocked_request.new_url, | 1345 blocked_request.new_url, |
| 1341 &conflicting_extensions, | 1346 &warnings, |
| 1342 blocked_request.net_log); | 1347 blocked_request.net_log); |
| 1343 } else if (blocked_request.event == kOnBeforeSendHeaders) { | 1348 } else if (blocked_request.event == kOnBeforeSendHeaders) { |
| 1344 CHECK(!blocked_request.callback.is_null()); | 1349 CHECK(!blocked_request.callback.is_null()); |
| 1345 helpers::MergeOnBeforeSendHeadersResponses( | 1350 helpers::MergeOnBeforeSendHeadersResponses( |
| 1346 blocked_request.response_deltas, | 1351 blocked_request.response_deltas, |
| 1347 blocked_request.request_headers, | 1352 blocked_request.request_headers, |
| 1348 &conflicting_extensions, | 1353 &warnings, |
| 1349 blocked_request.net_log); | 1354 blocked_request.net_log); |
| 1350 } else if (blocked_request.event == kOnHeadersReceived) { | 1355 } else if (blocked_request.event == kOnHeadersReceived) { |
| 1351 CHECK(!blocked_request.callback.is_null()); | 1356 CHECK(!blocked_request.callback.is_null()); |
| 1352 helpers::MergeOnHeadersReceivedResponses( | 1357 helpers::MergeOnHeadersReceivedResponses( |
| 1353 blocked_request.response_deltas, | 1358 blocked_request.response_deltas, |
| 1354 blocked_request.original_response_headers.get(), | 1359 blocked_request.original_response_headers.get(), |
| 1355 blocked_request.override_response_headers, | 1360 blocked_request.override_response_headers, |
| 1356 &conflicting_extensions, | 1361 &warnings, |
| 1357 blocked_request.net_log); | 1362 blocked_request.net_log); |
| 1358 } else if (blocked_request.event == kOnAuthRequired) { | 1363 } else if (blocked_request.event == kOnAuthRequired) { |
| 1359 CHECK(blocked_request.callback.is_null()); | 1364 CHECK(blocked_request.callback.is_null()); |
| 1360 CHECK(!blocked_request.auth_callback.is_null()); | 1365 CHECK(!blocked_request.auth_callback.is_null()); |
| 1361 credentials_set = helpers::MergeOnAuthRequiredResponses( | 1366 credentials_set = helpers::MergeOnAuthRequiredResponses( |
| 1362 blocked_request.response_deltas, | 1367 blocked_request.response_deltas, |
| 1363 blocked_request.auth_credentials, | 1368 blocked_request.auth_credentials, |
| 1364 &conflicting_extensions, | 1369 &warnings, |
| 1365 blocked_request.net_log); | 1370 blocked_request.net_log); |
| 1366 } else { | 1371 } else { |
| 1367 NOTREACHED(); | 1372 NOTREACHED(); |
| 1368 } | 1373 } |
| 1369 | 1374 |
| 1370 if (!conflicting_extensions.empty()) { | 1375 if (!warnings.empty()) { |
| 1371 BrowserThread::PostTask( | 1376 BrowserThread::PostTask( |
| 1372 BrowserThread::UI, | 1377 BrowserThread::UI, |
| 1373 FROM_HERE, | 1378 FROM_HERE, |
| 1374 base::Bind(&ExtensionWarningSet::NotifyWarningsOnUI, | 1379 base::Bind(&ExtensionWarningService::NotifyWarningsOnUI, |
| 1375 profile, | 1380 profile, warnings)); |
| 1376 conflicting_extensions, | |
| 1377 ExtensionWarningSet::kNetworkConflict)); | |
| 1378 } | 1381 } |
| 1379 | 1382 |
| 1380 if (canceled) { | 1383 if (canceled) { |
| 1381 request_time_tracker_->SetRequestCanceled(request_id); | 1384 request_time_tracker_->SetRequestCanceled(request_id); |
| 1382 } else if (blocked_request.new_url && | 1385 } else if (blocked_request.new_url && |
| 1383 !blocked_request.new_url->is_empty()) { | 1386 !blocked_request.new_url->is_empty()) { |
| 1384 request_time_tracker_->SetRequestRedirected(request_id); | 1387 request_time_tracker_->SetRequestRedirected(request_id); |
| 1385 } | 1388 } |
| 1386 | 1389 |
| 1387 // This triggers onErrorOccurred if canceled is true. | 1390 // This triggers onErrorOccurred if canceled is true. |
| (...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1796 QuotaLimitHeuristic::BucketMapper* bucket_mapper = | 1799 QuotaLimitHeuristic::BucketMapper* bucket_mapper = |
| 1797 new QuotaLimitHeuristic::SingletonBucketMapper(); | 1800 new QuotaLimitHeuristic::SingletonBucketMapper(); |
| 1798 ClearCacheQuotaHeuristic* heuristic = | 1801 ClearCacheQuotaHeuristic* heuristic = |
| 1799 new ClearCacheQuotaHeuristic(config, bucket_mapper); | 1802 new ClearCacheQuotaHeuristic(config, bucket_mapper); |
| 1800 heuristics->push_back(heuristic); | 1803 heuristics->push_back(heuristic); |
| 1801 } | 1804 } |
| 1802 | 1805 |
| 1803 void WebRequestHandlerBehaviorChanged::OnQuotaExceeded( | 1806 void WebRequestHandlerBehaviorChanged::OnQuotaExceeded( |
| 1804 const std::string& violation_error) { | 1807 const std::string& violation_error) { |
| 1805 // Post warning message. | 1808 // Post warning message. |
| 1806 std::set<std::string> extension_ids; | 1809 ExtensionWarningSet warnings; |
| 1807 extension_ids.insert(extension_id()); | 1810 warnings.insert( |
| 1811 ExtensionWarning::CreateRepeatedCacheFlushesWarning(extension_id())); |
| 1808 BrowserThread::PostTask( | 1812 BrowserThread::PostTask( |
| 1809 BrowserThread::UI, | 1813 BrowserThread::UI, |
| 1810 FROM_HERE, | 1814 FROM_HERE, |
| 1811 base::Bind(&ExtensionWarningSet::NotifyWarningsOnUI, | 1815 base::Bind(&ExtensionWarningService::NotifyWarningsOnUI, |
| 1812 profile_id(), | 1816 profile_id(), warnings)); |
| 1813 extension_ids, | |
| 1814 ExtensionWarningSet::kRepeatedCacheFlushes)); | |
| 1815 | 1817 |
| 1816 // Continue gracefully. | 1818 // Continue gracefully. |
| 1817 Run(); | 1819 Run(); |
| 1818 } | 1820 } |
| 1819 | 1821 |
| 1820 bool WebRequestHandlerBehaviorChanged::RunImpl() { | 1822 bool WebRequestHandlerBehaviorChanged::RunImpl() { |
| 1821 helpers::ClearCacheOnNavigation(); | 1823 helpers::ClearCacheOnNavigation(); |
| 1822 return true; | 1824 return true; |
| 1823 } | 1825 } |
| 1824 | 1826 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1840 } else if ((*it)->name().find("AdBlock") != std::string::npos) { | 1842 } else if ((*it)->name().find("AdBlock") != std::string::npos) { |
| 1841 adblock = true; | 1843 adblock = true; |
| 1842 } else { | 1844 } else { |
| 1843 other = true; | 1845 other = true; |
| 1844 } | 1846 } |
| 1845 } | 1847 } |
| 1846 } | 1848 } |
| 1847 | 1849 |
| 1848 host->Send(new ExtensionMsg_UsingWebRequestAPI(adblock, adblock_plus, other)); | 1850 host->Send(new ExtensionMsg_UsingWebRequestAPI(adblock, adblock_plus, other)); |
| 1849 } | 1851 } |
| OLD | NEW |