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

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, 3 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 "
(...skipping 1298 matching lines...) Expand 10 before | Expand all | Expand 10 after
1318 BlockedRequest& blocked_request = blocked_requests_[request_id]; 1319 BlockedRequest& blocked_request = blocked_requests_[request_id];
1319 CHECK(blocked_request.num_handlers_blocking == 0); 1320 CHECK(blocked_request.num_handlers_blocking == 0);
1320 helpers::EventResponseDeltas& deltas = blocked_request.response_deltas; 1321 helpers::EventResponseDeltas& deltas = blocked_request.response_deltas;
1321 base::TimeDelta block_time = 1322 base::TimeDelta block_time =
1322 base::Time::Now() - blocked_request.blocking_time; 1323 base::Time::Now() - blocked_request.blocking_time;
1323 request_time_tracker_->IncrementTotalBlockTime(request_id, block_time); 1324 request_time_tracker_->IncrementTotalBlockTime(request_id, block_time);
1324 1325
1325 bool credentials_set = false; 1326 bool credentials_set = false;
1326 1327
1327 deltas.sort(&helpers::InDecreasingExtensionInstallationTimeOrder); 1328 deltas.sort(&helpers::InDecreasingExtensionInstallationTimeOrder);
1328 std::set<std::string> conflicting_extensions; 1329 scoped_ptr<ExtensionWarningSet> warnings(new ExtensionWarningSet);
1329 1330
1330 bool canceled = false; 1331 bool canceled = false;
1331 helpers::MergeCancelOfResponses( 1332 helpers::MergeCancelOfResponses(
1332 blocked_request.response_deltas, 1333 blocked_request.response_deltas,
1333 &canceled, 1334 &canceled,
1334 blocked_request.net_log); 1335 blocked_request.net_log);
1335 1336
1336 if (blocked_request.event == kOnBeforeRequest) { 1337 if (blocked_request.event == kOnBeforeRequest) {
1337 CHECK(!blocked_request.callback.is_null()); 1338 CHECK(!blocked_request.callback.is_null());
1338 helpers::MergeOnBeforeRequestResponses( 1339 helpers::MergeOnBeforeRequestResponses(
1339 blocked_request.response_deltas, 1340 blocked_request.response_deltas,
1340 blocked_request.new_url, 1341 blocked_request.new_url,
1341 &conflicting_extensions, 1342 warnings.get(),
1342 blocked_request.net_log); 1343 blocked_request.net_log);
1343 } else if (blocked_request.event == kOnBeforeSendHeaders) { 1344 } else if (blocked_request.event == kOnBeforeSendHeaders) {
1344 CHECK(!blocked_request.callback.is_null()); 1345 CHECK(!blocked_request.callback.is_null());
1345 helpers::MergeOnBeforeSendHeadersResponses( 1346 helpers::MergeOnBeforeSendHeadersResponses(
1346 blocked_request.response_deltas, 1347 blocked_request.response_deltas,
1347 blocked_request.request_headers, 1348 blocked_request.request_headers,
1348 &conflicting_extensions, 1349 warnings.get(),
1349 blocked_request.net_log); 1350 blocked_request.net_log);
1350 } else if (blocked_request.event == kOnHeadersReceived) { 1351 } else if (blocked_request.event == kOnHeadersReceived) {
1351 CHECK(!blocked_request.callback.is_null()); 1352 CHECK(!blocked_request.callback.is_null());
1352 helpers::MergeOnHeadersReceivedResponses( 1353 helpers::MergeOnHeadersReceivedResponses(
1353 blocked_request.response_deltas, 1354 blocked_request.response_deltas,
1354 blocked_request.original_response_headers.get(), 1355 blocked_request.original_response_headers.get(),
1355 blocked_request.override_response_headers, 1356 blocked_request.override_response_headers,
1356 &conflicting_extensions, 1357 warnings.get(),
1357 blocked_request.net_log); 1358 blocked_request.net_log);
1358 } else if (blocked_request.event == kOnAuthRequired) { 1359 } else if (blocked_request.event == kOnAuthRequired) {
1359 CHECK(blocked_request.callback.is_null()); 1360 CHECK(blocked_request.callback.is_null());
1360 CHECK(!blocked_request.auth_callback.is_null()); 1361 CHECK(!blocked_request.auth_callback.is_null());
1361 credentials_set = helpers::MergeOnAuthRequiredResponses( 1362 credentials_set = helpers::MergeOnAuthRequiredResponses(
1362 blocked_request.response_deltas, 1363 blocked_request.response_deltas,
1363 blocked_request.auth_credentials, 1364 blocked_request.auth_credentials,
1364 &conflicting_extensions, 1365 warnings.get(),
1365 blocked_request.net_log); 1366 blocked_request.net_log);
1366 } else { 1367 } else {
1367 NOTREACHED(); 1368 NOTREACHED();
1368 } 1369 }
1369 1370
1370 if (!conflicting_extensions.empty()) { 1371 if (!warnings->IsEmpty()) {
1371 BrowserThread::PostTask( 1372 BrowserThread::PostTask(
1372 BrowserThread::UI, 1373 BrowserThread::UI,
1373 FROM_HERE, 1374 FROM_HERE,
1374 base::Bind(&ExtensionWarningSet::NotifyWarningsOnUI, 1375 base::Bind(&ExtensionWarningService::NotifyWarningsOnUI,
1375 profile, 1376 profile,
1376 conflicting_extensions, 1377 base::Passed(warnings.Pass())));
1377 ExtensionWarningSet::kNetworkConflict));
1378 } 1378 }
1379 1379
1380 if (canceled) { 1380 if (canceled) {
1381 request_time_tracker_->SetRequestCanceled(request_id); 1381 request_time_tracker_->SetRequestCanceled(request_id);
1382 } else if (blocked_request.new_url && 1382 } else if (blocked_request.new_url &&
1383 !blocked_request.new_url->is_empty()) { 1383 !blocked_request.new_url->is_empty()) {
1384 request_time_tracker_->SetRequestRedirected(request_id); 1384 request_time_tracker_->SetRequestRedirected(request_id);
1385 } 1385 }
1386 1386
1387 // This triggers onErrorOccurred if canceled is true. 1387 // This triggers onErrorOccurred if canceled is true.
(...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after
1796 QuotaLimitHeuristic::BucketMapper* bucket_mapper = 1796 QuotaLimitHeuristic::BucketMapper* bucket_mapper =
1797 new QuotaLimitHeuristic::SingletonBucketMapper(); 1797 new QuotaLimitHeuristic::SingletonBucketMapper();
1798 ClearCacheQuotaHeuristic* heuristic = 1798 ClearCacheQuotaHeuristic* heuristic =
1799 new ClearCacheQuotaHeuristic(config, bucket_mapper); 1799 new ClearCacheQuotaHeuristic(config, bucket_mapper);
1800 heuristics->push_back(heuristic); 1800 heuristics->push_back(heuristic);
1801 } 1801 }
1802 1802
1803 void WebRequestHandlerBehaviorChanged::OnQuotaExceeded( 1803 void WebRequestHandlerBehaviorChanged::OnQuotaExceeded(
1804 const std::string& violation_error) { 1804 const std::string& violation_error) {
1805 // Post warning message. 1805 // Post warning message.
1806 std::set<std::string> extension_ids; 1806 scoped_ptr<ExtensionWarningSet> warnings(new ExtensionWarningSet);
1807 extension_ids.insert(extension_id()); 1807 warnings->Insert(
1808 ExtensionWarning::CreateRepeatedCacheFlushesWarning(extension_id()));
1808 BrowserThread::PostTask( 1809 BrowserThread::PostTask(
1809 BrowserThread::UI, 1810 BrowserThread::UI,
1810 FROM_HERE, 1811 FROM_HERE,
1811 base::Bind(&ExtensionWarningSet::NotifyWarningsOnUI, 1812 base::Bind(&ExtensionWarningService::NotifyWarningsOnUI,
1812 profile_id(), 1813 profile_id(),
1813 extension_ids, 1814 base::Passed(warnings.Pass())));
1814 ExtensionWarningSet::kRepeatedCacheFlushes));
1815 1815
1816 // Continue gracefully. 1816 // Continue gracefully.
1817 Run(); 1817 Run();
1818 } 1818 }
1819 1819
1820 bool WebRequestHandlerBehaviorChanged::RunImpl() { 1820 bool WebRequestHandlerBehaviorChanged::RunImpl() {
1821 helpers::ClearCacheOnNavigation(); 1821 helpers::ClearCacheOnNavigation();
1822 return true; 1822 return true;
1823 } 1823 }
1824 1824
(...skipping 15 matching lines...) Expand all
1840 } else if ((*it)->name().find("AdBlock") != std::string::npos) { 1840 } else if ((*it)->name().find("AdBlock") != std::string::npos) {
1841 adblock = true; 1841 adblock = true;
1842 } else { 1842 } else {
1843 other = true; 1843 other = true;
1844 } 1844 }
1845 } 1845 }
1846 } 1846 }
1847 1847
1848 host->Send(new ExtensionMsg_UsingWebRequestAPI(adblock, adblock_plus, other)); 1848 host->Send(new ExtensionMsg_UsingWebRequestAPI(adblock, adblock_plus, other));
1849 } 1849 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698