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

Side by Side Diff: chrome/browser/extensions/api/web_request/web_request_api.cc

Issue 10407105: Improve error messaging of webRequest API in case of conflicts (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Merged with ToT Created 8 years, 2 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 | Annotate | Revision Log
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/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/upload_data_presenter.h" 23 #include "chrome/browser/extensions/api/web_request/upload_data_presenter.h"
23 #include "chrome/browser/extensions/api/web_request/web_request_api_constants.h" 24 #include "chrome/browser/extensions/api/web_request/web_request_api_constants.h"
24 #include "chrome/browser/extensions/api/web_request/web_request_api_helpers.h" 25 #include "chrome/browser/extensions/api/web_request/web_request_api_helpers.h"
25 #include "chrome/browser/extensions/api/web_request/web_request_time_tracker.h" 26 #include "chrome/browser/extensions/api/web_request/web_request_time_tracker.h"
26 #include "chrome/browser/extensions/event_router.h" 27 #include "chrome/browser/extensions/event_router.h"
27 #include "chrome/browser/extensions/extension_info_map.h" 28 #include "chrome/browser/extensions/extension_info_map.h"
28 #include "chrome/browser/extensions/extension_prefs.h" 29 #include "chrome/browser/extensions/extension_prefs.h"
29 #include "chrome/browser/extensions/extension_service.h" 30 #include "chrome/browser/extensions/extension_service.h"
30 #include "chrome/browser/extensions/extension_tab_id_map.h" 31 #include "chrome/browser/extensions/extension_tab_id_map.h"
32 #include "chrome/browser/extensions/extension_warning_set.h"
31 #include "chrome/browser/profiles/profile.h" 33 #include "chrome/browser/profiles/profile.h"
32 #include "chrome/browser/profiles/profile_manager.h" 34 #include "chrome/browser/profiles/profile_manager.h"
33 #include "chrome/browser/renderer_host/chrome_render_message_filter.h" 35 #include "chrome/browser/renderer_host/chrome_render_message_filter.h"
34 #include "chrome/common/extensions/api/web_request.h" 36 #include "chrome/common/extensions/api/web_request.h"
35 #include "chrome/common/extensions/event_filtering_info.h" 37 #include "chrome/common/extensions/event_filtering_info.h"
36 #include "chrome/common/extensions/extension.h" 38 #include "chrome/common/extensions/extension.h"
37 #include "chrome/common/extensions/extension_constants.h" 39 #include "chrome/common/extensions/extension_constants.h"
38 #include "chrome/common/extensions/extension_error_utils.h" 40 #include "chrome/common/extensions/extension_error_utils.h"
39 #include "chrome/common/extensions/extension_messages.h" 41 #include "chrome/common/extensions/extension_messages.h"
40 #include "chrome/common/extensions/features/feature.h" 42 #include "chrome/common/extensions/features/feature.h"
(...skipping 14 matching lines...) Expand all
55 #include "ui/base/l10n/l10n_util.h" 57 #include "ui/base/l10n/l10n_util.h"
56 58
57 using base::DictionaryValue; 59 using base::DictionaryValue;
58 using base::ListValue; 60 using base::ListValue;
59 using base::StringValue; 61 using base::StringValue;
60 using chrome::VersionInfo; 62 using chrome::VersionInfo;
61 using content::BrowserMessageFilter; 63 using content::BrowserMessageFilter;
62 using content::BrowserThread; 64 using content::BrowserThread;
63 using content::ResourceRequestInfo; 65 using content::ResourceRequestInfo;
64 using extensions::Extension; 66 using extensions::Extension;
67 using extensions::ExtensionWarning;
68 using extensions::ExtensionWarningSet;
65 using extensions::Feature; 69 using extensions::Feature;
66 70
67 using extensions::web_navigation_api_helpers::GetFrameId; 71 using extensions::web_navigation_api_helpers::GetFrameId;
68 72
69 namespace helpers = extension_web_request_api_helpers; 73 namespace helpers = extension_web_request_api_helpers;
70 namespace keys = extension_web_request_api_constants; 74 namespace keys = extension_web_request_api_constants;
71 namespace web_request = extensions::api::web_request; 75 namespace web_request = extensions::api::web_request;
72 76
73 namespace { 77 namespace {
74 78
(...skipping 1301 matching lines...) Expand 10 before | Expand all | Expand 10 after
1376 BlockedRequest& blocked_request = blocked_requests_[request_id]; 1380 BlockedRequest& blocked_request = blocked_requests_[request_id];
1377 CHECK(blocked_request.num_handlers_blocking == 0); 1381 CHECK(blocked_request.num_handlers_blocking == 0);
1378 helpers::EventResponseDeltas& deltas = blocked_request.response_deltas; 1382 helpers::EventResponseDeltas& deltas = blocked_request.response_deltas;
1379 base::TimeDelta block_time = 1383 base::TimeDelta block_time =
1380 base::Time::Now() - blocked_request.blocking_time; 1384 base::Time::Now() - blocked_request.blocking_time;
1381 request_time_tracker_->IncrementTotalBlockTime(request_id, block_time); 1385 request_time_tracker_->IncrementTotalBlockTime(request_id, block_time);
1382 1386
1383 bool credentials_set = false; 1387 bool credentials_set = false;
1384 1388
1385 deltas.sort(&helpers::InDecreasingExtensionInstallationTimeOrder); 1389 deltas.sort(&helpers::InDecreasingExtensionInstallationTimeOrder);
1386 std::set<std::string> conflicting_extensions; 1390 std::set<ExtensionWarning> warnings;
1387 1391
1388 bool canceled = false; 1392 bool canceled = false;
1389 helpers::MergeCancelOfResponses( 1393 helpers::MergeCancelOfResponses(
1390 blocked_request.response_deltas, 1394 blocked_request.response_deltas,
1391 &canceled, 1395 &canceled,
1392 blocked_request.net_log); 1396 blocked_request.net_log);
1393 1397
1394 if (blocked_request.event == kOnBeforeRequest) { 1398 if (blocked_request.event == kOnBeforeRequest) {
1395 CHECK(!blocked_request.callback.is_null()); 1399 CHECK(!blocked_request.callback.is_null());
1396 helpers::MergeOnBeforeRequestResponses( 1400 helpers::MergeOnBeforeRequestResponses(
1397 blocked_request.response_deltas, 1401 blocked_request.response_deltas,
1398 blocked_request.new_url, 1402 blocked_request.new_url,
1399 &conflicting_extensions, 1403 &warnings,
1400 blocked_request.net_log); 1404 blocked_request.net_log);
1401 } else if (blocked_request.event == kOnBeforeSendHeaders) { 1405 } else if (blocked_request.event == kOnBeforeSendHeaders) {
1402 CHECK(!blocked_request.callback.is_null()); 1406 CHECK(!blocked_request.callback.is_null());
1403 helpers::MergeOnBeforeSendHeadersResponses( 1407 helpers::MergeOnBeforeSendHeadersResponses(
1404 blocked_request.response_deltas, 1408 blocked_request.response_deltas,
1405 blocked_request.request_headers, 1409 blocked_request.request_headers,
1406 &conflicting_extensions, 1410 &warnings,
1407 blocked_request.net_log); 1411 blocked_request.net_log);
1408 } else if (blocked_request.event == kOnHeadersReceived) { 1412 } else if (blocked_request.event == kOnHeadersReceived) {
1409 CHECK(!blocked_request.callback.is_null()); 1413 CHECK(!blocked_request.callback.is_null());
1410 helpers::MergeOnHeadersReceivedResponses( 1414 helpers::MergeOnHeadersReceivedResponses(
1411 blocked_request.response_deltas, 1415 blocked_request.response_deltas,
1412 blocked_request.original_response_headers.get(), 1416 blocked_request.original_response_headers.get(),
1413 blocked_request.override_response_headers, 1417 blocked_request.override_response_headers,
1414 &conflicting_extensions, 1418 &warnings,
1415 blocked_request.net_log); 1419 blocked_request.net_log);
1416 } else if (blocked_request.event == kOnAuthRequired) { 1420 } else if (blocked_request.event == kOnAuthRequired) {
1417 CHECK(blocked_request.callback.is_null()); 1421 CHECK(blocked_request.callback.is_null());
1418 CHECK(!blocked_request.auth_callback.is_null()); 1422 CHECK(!blocked_request.auth_callback.is_null());
1419 credentials_set = helpers::MergeOnAuthRequiredResponses( 1423 credentials_set = helpers::MergeOnAuthRequiredResponses(
1420 blocked_request.response_deltas, 1424 blocked_request.response_deltas,
1421 blocked_request.auth_credentials, 1425 blocked_request.auth_credentials,
1422 &conflicting_extensions, 1426 &warnings,
1423 blocked_request.net_log); 1427 blocked_request.net_log);
1424 } else { 1428 } else {
1425 NOTREACHED(); 1429 NOTREACHED();
1426 } 1430 }
1427 1431
1428 if (!conflicting_extensions.empty()) { 1432 if (!warnings.empty()) {
1429 BrowserThread::PostTask( 1433 BrowserThread::PostTask(
1430 BrowserThread::UI, 1434 BrowserThread::UI,
1431 FROM_HERE, 1435 FROM_HERE,
1432 base::Bind(&ExtensionWarningSet::NotifyWarningsOnUI, 1436 base::Bind(&ExtensionWarningSet::NotifyWarningsOnUI, profile,
1433 profile, 1437 warnings));
1434 conflicting_extensions,
1435 ExtensionWarningSet::kNetworkConflict));
1436 } 1438 }
1437 1439
1438 if (canceled) { 1440 if (canceled) {
1439 request_time_tracker_->SetRequestCanceled(request_id); 1441 request_time_tracker_->SetRequestCanceled(request_id);
1440 } else if (blocked_request.new_url && 1442 } else if (blocked_request.new_url &&
1441 !blocked_request.new_url->is_empty()) { 1443 !blocked_request.new_url->is_empty()) {
1442 request_time_tracker_->SetRequestRedirected(request_id); 1444 request_time_tracker_->SetRequestRedirected(request_id);
1443 } 1445 }
1444 1446
1445 // This triggers onErrorOccurred if canceled is true. 1447 // This triggers onErrorOccurred if canceled is true.
(...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after
1854 QuotaLimitHeuristic::BucketMapper* bucket_mapper = 1856 QuotaLimitHeuristic::BucketMapper* bucket_mapper =
1855 new QuotaLimitHeuristic::SingletonBucketMapper(); 1857 new QuotaLimitHeuristic::SingletonBucketMapper();
1856 ClearCacheQuotaHeuristic* heuristic = 1858 ClearCacheQuotaHeuristic* heuristic =
1857 new ClearCacheQuotaHeuristic(config, bucket_mapper); 1859 new ClearCacheQuotaHeuristic(config, bucket_mapper);
1858 heuristics->push_back(heuristic); 1860 heuristics->push_back(heuristic);
1859 } 1861 }
1860 1862
1861 void WebRequestHandlerBehaviorChanged::OnQuotaExceeded( 1863 void WebRequestHandlerBehaviorChanged::OnQuotaExceeded(
1862 const std::string& violation_error) { 1864 const std::string& violation_error) {
1863 // Post warning message. 1865 // Post warning message.
1864 std::set<std::string> extension_ids; 1866 std::set<ExtensionWarning> warnings;
1865 extension_ids.insert(extension_id()); 1867 warnings.insert(
1868 ExtensionWarning::CreateRepeatedCacheFlushesWarning(extension_id()));
1866 BrowserThread::PostTask( 1869 BrowserThread::PostTask(
1867 BrowserThread::UI, 1870 BrowserThread::UI,
1868 FROM_HERE, 1871 FROM_HERE,
1869 base::Bind(&ExtensionWarningSet::NotifyWarningsOnUI, 1872 base::Bind(&ExtensionWarningSet::NotifyWarningsOnUI, profile_id(),
1870 profile_id(), 1873 warnings));
1871 extension_ids,
1872 ExtensionWarningSet::kRepeatedCacheFlushes));
1873 1874
1874 // Continue gracefully. 1875 // Continue gracefully.
1875 Run(); 1876 Run();
1876 } 1877 }
1877 1878
1878 bool WebRequestHandlerBehaviorChanged::RunImpl() { 1879 bool WebRequestHandlerBehaviorChanged::RunImpl() {
1879 helpers::ClearCacheOnNavigation(); 1880 helpers::ClearCacheOnNavigation();
1880 return true; 1881 return true;
1881 } 1882 }
1882 1883
(...skipping 15 matching lines...) Expand all
1898 } else if ((*it)->name().find("AdBlock") != std::string::npos) { 1899 } else if ((*it)->name().find("AdBlock") != std::string::npos) {
1899 adblock = true; 1900 adblock = true;
1900 } else { 1901 } else {
1901 other = true; 1902 other = true;
1902 } 1903 }
1903 } 1904 }
1904 } 1905 }
1905 1906
1906 host->Send(new ExtensionMsg_UsingWebRequestAPI(adblock, adblock_plus, other)); 1907 host->Send(new ExtensionMsg_UsingWebRequestAPI(adblock, adblock_plus, other));
1907 } 1908 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698