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

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: Addressed Evan's comments Created 8 years, 1 month 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/request_stage.h" 20 #include "chrome/browser/extensions/api/declarative_webrequest/request_stage.h"
20 #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_rule.h " 21 #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_rule.h "
21 #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_ registry.h" 22 #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_ registry.h"
22 #include "chrome/browser/extensions/api/web_navigation/web_navigation_api_helper s.h" 23 #include "chrome/browser/extensions/api/web_navigation/web_navigation_api_helper s.h"
23 #include "chrome/browser/extensions/api/web_request/upload_data_presenter.h" 24 #include "chrome/browser/extensions/api/web_request/upload_data_presenter.h"
24 #include "chrome/browser/extensions/api/web_request/web_request_api_constants.h" 25 #include "chrome/browser/extensions/api/web_request/web_request_api_constants.h"
25 #include "chrome/browser/extensions/api/web_request/web_request_api_helpers.h" 26 #include "chrome/browser/extensions/api/web_request/web_request_api_helpers.h"
26 #include "chrome/browser/extensions/api/web_request/web_request_time_tracker.h" 27 #include "chrome/browser/extensions/api/web_request/web_request_time_tracker.h"
27 #include "chrome/browser/extensions/event_router.h" 28 #include "chrome/browser/extensions/event_router.h"
28 #include "chrome/browser/extensions/extension_info_map.h" 29 #include "chrome/browser/extensions/extension_info_map.h"
29 #include "chrome/browser/extensions/extension_prefs.h" 30 #include "chrome/browser/extensions/extension_prefs.h"
30 #include "chrome/browser/extensions/extension_service.h" 31 #include "chrome/browser/extensions/extension_service.h"
31 #include "chrome/browser/extensions/extension_tab_id_map.h" 32 #include "chrome/browser/extensions/extension_tab_id_map.h"
33 #include "chrome/browser/extensions/extension_warning_service.h"
34 #include "chrome/browser/extensions/extension_warning_set.h"
32 #include "chrome/browser/profiles/profile.h" 35 #include "chrome/browser/profiles/profile.h"
33 #include "chrome/browser/profiles/profile_manager.h" 36 #include "chrome/browser/profiles/profile_manager.h"
34 #include "chrome/browser/renderer_host/chrome_render_message_filter.h" 37 #include "chrome/browser/renderer_host/chrome_render_message_filter.h"
35 #include "chrome/common/extensions/api/web_request.h" 38 #include "chrome/common/extensions/api/web_request.h"
36 #include "chrome/common/extensions/event_filtering_info.h" 39 #include "chrome/common/extensions/event_filtering_info.h"
37 #include "chrome/common/extensions/extension.h" 40 #include "chrome/common/extensions/extension.h"
38 #include "chrome/common/extensions/extension_constants.h" 41 #include "chrome/common/extensions/extension_constants.h"
39 #include "chrome/common/extensions/extension_error_utils.h" 42 #include "chrome/common/extensions/extension_error_utils.h"
40 #include "chrome/common/extensions/extension_messages.h" 43 #include "chrome/common/extensions/extension_messages.h"
41 #include "chrome/common/extensions/features/feature.h" 44 #include "chrome/common/extensions/features/feature.h"
(...skipping 14 matching lines...) Expand all
56 #include "ui/base/l10n/l10n_util.h" 59 #include "ui/base/l10n/l10n_util.h"
57 60
58 using base::DictionaryValue; 61 using base::DictionaryValue;
59 using base::ListValue; 62 using base::ListValue;
60 using base::StringValue; 63 using base::StringValue;
61 using chrome::VersionInfo; 64 using chrome::VersionInfo;
62 using content::BrowserMessageFilter; 65 using content::BrowserMessageFilter;
63 using content::BrowserThread; 66 using content::BrowserThread;
64 using content::ResourceRequestInfo; 67 using content::ResourceRequestInfo;
65 using extensions::Extension; 68 using extensions::Extension;
69 using extensions::ExtensionWarning;
70 using extensions::ExtensionWarningService;
71 using extensions::ExtensionWarningSet;
66 using extensions::Feature; 72 using extensions::Feature;
67
68 using extensions::web_navigation_api_helpers::GetFrameId; 73 using extensions::web_navigation_api_helpers::GetFrameId;
69 74
70 namespace helpers = extension_web_request_api_helpers; 75 namespace helpers = extension_web_request_api_helpers;
71 namespace keys = extension_web_request_api_constants; 76 namespace keys = extension_web_request_api_constants;
72 namespace web_request = extensions::api::web_request; 77 namespace web_request = extensions::api::web_request;
73 78
74 namespace { 79 namespace {
75 80
76 // List of all the webRequest events. 81 // List of all the webRequest events.
77 const char* const kWebRequestEvents[] = { 82 const char* const kWebRequestEvents[] = {
(...skipping 1305 matching lines...) Expand 10 before | Expand all | Expand 10 after
1383 BlockedRequest& blocked_request = blocked_requests_[request_id]; 1388 BlockedRequest& blocked_request = blocked_requests_[request_id];
1384 CHECK(blocked_request.num_handlers_blocking == 0); 1389 CHECK(blocked_request.num_handlers_blocking == 0);
1385 helpers::EventResponseDeltas& deltas = blocked_request.response_deltas; 1390 helpers::EventResponseDeltas& deltas = blocked_request.response_deltas;
1386 base::TimeDelta block_time = 1391 base::TimeDelta block_time =
1387 base::Time::Now() - blocked_request.blocking_time; 1392 base::Time::Now() - blocked_request.blocking_time;
1388 request_time_tracker_->IncrementTotalBlockTime(request_id, block_time); 1393 request_time_tracker_->IncrementTotalBlockTime(request_id, block_time);
1389 1394
1390 bool credentials_set = false; 1395 bool credentials_set = false;
1391 1396
1392 deltas.sort(&helpers::InDecreasingExtensionInstallationTimeOrder); 1397 deltas.sort(&helpers::InDecreasingExtensionInstallationTimeOrder);
1393 std::set<std::string> conflicting_extensions; 1398 ExtensionWarningSet warnings;
1394 1399
1395 bool canceled = false; 1400 bool canceled = false;
1396 helpers::MergeCancelOfResponses( 1401 helpers::MergeCancelOfResponses(
1397 blocked_request.response_deltas, 1402 blocked_request.response_deltas,
1398 &canceled, 1403 &canceled,
1399 blocked_request.net_log); 1404 blocked_request.net_log);
1400 1405
1401 if (blocked_request.event == kOnBeforeRequest) { 1406 if (blocked_request.event == kOnBeforeRequest) {
1402 CHECK(!blocked_request.callback.is_null()); 1407 CHECK(!blocked_request.callback.is_null());
1403 helpers::MergeOnBeforeRequestResponses( 1408 helpers::MergeOnBeforeRequestResponses(
1404 blocked_request.response_deltas, 1409 blocked_request.response_deltas,
1405 blocked_request.new_url, 1410 blocked_request.new_url,
1406 &conflicting_extensions, 1411 &warnings,
1407 blocked_request.net_log); 1412 blocked_request.net_log);
1408 } else if (blocked_request.event == kOnBeforeSendHeaders) { 1413 } else if (blocked_request.event == kOnBeforeSendHeaders) {
1409 CHECK(!blocked_request.callback.is_null()); 1414 CHECK(!blocked_request.callback.is_null());
1410 helpers::MergeOnBeforeSendHeadersResponses( 1415 helpers::MergeOnBeforeSendHeadersResponses(
1411 blocked_request.response_deltas, 1416 blocked_request.response_deltas,
1412 blocked_request.request_headers, 1417 blocked_request.request_headers,
1413 &conflicting_extensions, 1418 &warnings,
1414 blocked_request.net_log); 1419 blocked_request.net_log);
1415 } else if (blocked_request.event == kOnHeadersReceived) { 1420 } else if (blocked_request.event == kOnHeadersReceived) {
1416 CHECK(!blocked_request.callback.is_null()); 1421 CHECK(!blocked_request.callback.is_null());
1417 helpers::MergeOnHeadersReceivedResponses( 1422 helpers::MergeOnHeadersReceivedResponses(
1418 blocked_request.response_deltas, 1423 blocked_request.response_deltas,
1419 blocked_request.original_response_headers.get(), 1424 blocked_request.original_response_headers.get(),
1420 blocked_request.override_response_headers, 1425 blocked_request.override_response_headers,
1421 &conflicting_extensions, 1426 &warnings,
1422 blocked_request.net_log); 1427 blocked_request.net_log);
1423 } else if (blocked_request.event == kOnAuthRequired) { 1428 } else if (blocked_request.event == kOnAuthRequired) {
1424 CHECK(blocked_request.callback.is_null()); 1429 CHECK(blocked_request.callback.is_null());
1425 CHECK(!blocked_request.auth_callback.is_null()); 1430 CHECK(!blocked_request.auth_callback.is_null());
1426 credentials_set = helpers::MergeOnAuthRequiredResponses( 1431 credentials_set = helpers::MergeOnAuthRequiredResponses(
1427 blocked_request.response_deltas, 1432 blocked_request.response_deltas,
1428 blocked_request.auth_credentials, 1433 blocked_request.auth_credentials,
1429 &conflicting_extensions, 1434 &warnings,
1430 blocked_request.net_log); 1435 blocked_request.net_log);
1431 } else { 1436 } else {
1432 NOTREACHED(); 1437 NOTREACHED();
1433 } 1438 }
1434 1439
1435 if (!conflicting_extensions.empty()) { 1440 if (!warnings.empty()) {
1436 BrowserThread::PostTask( 1441 BrowserThread::PostTask(
1437 BrowserThread::UI, 1442 BrowserThread::UI,
1438 FROM_HERE, 1443 FROM_HERE,
1439 base::Bind(&ExtensionWarningSet::NotifyWarningsOnUI, 1444 base::Bind(&ExtensionWarningService::NotifyWarningsOnUI,
1440 profile, 1445 profile, warnings));
1441 conflicting_extensions,
1442 ExtensionWarningSet::kNetworkConflict));
1443 } 1446 }
1444 1447
1445 if (canceled) { 1448 if (canceled) {
1446 request_time_tracker_->SetRequestCanceled(request_id); 1449 request_time_tracker_->SetRequestCanceled(request_id);
1447 } else if (blocked_request.new_url && 1450 } else if (blocked_request.new_url &&
1448 !blocked_request.new_url->is_empty()) { 1451 !blocked_request.new_url->is_empty()) {
1449 request_time_tracker_->SetRequestRedirected(request_id); 1452 request_time_tracker_->SetRequestRedirected(request_id);
1450 } 1453 }
1451 1454
1452 // This triggers onErrorOccurred if canceled is true. 1455 // This triggers onErrorOccurred if canceled is true.
(...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after
1865 QuotaLimitHeuristic::BucketMapper* bucket_mapper = 1868 QuotaLimitHeuristic::BucketMapper* bucket_mapper =
1866 new QuotaLimitHeuristic::SingletonBucketMapper(); 1869 new QuotaLimitHeuristic::SingletonBucketMapper();
1867 ClearCacheQuotaHeuristic* heuristic = 1870 ClearCacheQuotaHeuristic* heuristic =
1868 new ClearCacheQuotaHeuristic(config, bucket_mapper); 1871 new ClearCacheQuotaHeuristic(config, bucket_mapper);
1869 heuristics->push_back(heuristic); 1872 heuristics->push_back(heuristic);
1870 } 1873 }
1871 1874
1872 void WebRequestHandlerBehaviorChanged::OnQuotaExceeded( 1875 void WebRequestHandlerBehaviorChanged::OnQuotaExceeded(
1873 const std::string& violation_error) { 1876 const std::string& violation_error) {
1874 // Post warning message. 1877 // Post warning message.
1875 std::set<std::string> extension_ids; 1878 ExtensionWarningSet warnings;
1876 extension_ids.insert(extension_id()); 1879 warnings.insert(
1880 ExtensionWarning::CreateRepeatedCacheFlushesWarning(extension_id()));
1877 BrowserThread::PostTask( 1881 BrowserThread::PostTask(
1878 BrowserThread::UI, 1882 BrowserThread::UI,
1879 FROM_HERE, 1883 FROM_HERE,
1880 base::Bind(&ExtensionWarningSet::NotifyWarningsOnUI, 1884 base::Bind(&ExtensionWarningService::NotifyWarningsOnUI,
1881 profile_id(), 1885 profile_id(), warnings));
1882 extension_ids,
1883 ExtensionWarningSet::kRepeatedCacheFlushes));
1884 1886
1885 // Continue gracefully. 1887 // Continue gracefully.
1886 Run(); 1888 Run();
1887 } 1889 }
1888 1890
1889 bool WebRequestHandlerBehaviorChanged::RunImpl() { 1891 bool WebRequestHandlerBehaviorChanged::RunImpl() {
1890 helpers::ClearCacheOnNavigation(); 1892 helpers::ClearCacheOnNavigation();
1891 return true; 1893 return true;
1892 } 1894 }
1893 1895
(...skipping 15 matching lines...) Expand all
1909 } else if ((*it)->name().find("AdBlock") != std::string::npos) { 1911 } else if ((*it)->name().find("AdBlock") != std::string::npos) {
1910 adblock = true; 1912 adblock = true;
1911 } else { 1913 } else {
1912 other = true; 1914 other = true;
1913 } 1915 }
1914 } 1916 }
1915 } 1917 }
1916 1918
1917 host->Send(new ExtensionMsg_UsingWebRequestAPI(adblock, adblock_plus, other)); 1919 host->Send(new ExtensionMsg_UsingWebRequestAPI(adblock, adblock_plus, other));
1918 } 1920 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698