| 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 "extensions/browser/api/web_request/web_request_api_helpers.h" | 5 #include "extensions/browser/api/web_request/web_request_api_helpers.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 14 matching lines...) Expand all Loading... |
| 25 #include "extensions/browser/extension_registry.h" | 25 #include "extensions/browser/extension_registry.h" |
| 26 #include "extensions/browser/extension_system.h" | 26 #include "extensions/browser/extension_system.h" |
| 27 #include "extensions/browser/extensions_browser_client.h" | 27 #include "extensions/browser/extensions_browser_client.h" |
| 28 #include "extensions/browser/runtime_data.h" | 28 #include "extensions/browser/runtime_data.h" |
| 29 #include "extensions/browser/warning_set.h" | 29 #include "extensions/browser/warning_set.h" |
| 30 #include "extensions/common/extension_messages.h" | 30 #include "extensions/common/extension_messages.h" |
| 31 #include "net/cookies/cookie_util.h" | 31 #include "net/cookies/cookie_util.h" |
| 32 #include "net/cookies/parsed_cookie.h" | 32 #include "net/cookies/parsed_cookie.h" |
| 33 #include "net/http/http_util.h" | 33 #include "net/http/http_util.h" |
| 34 #include "net/log/net_log.h" | 34 #include "net/log/net_log.h" |
| 35 #include "net/log/net_log_event_type.h" |
| 35 #include "net/url_request/url_request.h" | 36 #include "net/url_request/url_request.h" |
| 36 #include "url/url_constants.h" | 37 #include "url/url_constants.h" |
| 37 | 38 |
| 38 // TODO(battre): move all static functions into an anonymous namespace at the | 39 // TODO(battre): move all static functions into an anonymous namespace at the |
| 39 // top of this file. | 40 // top of this file. |
| 40 | 41 |
| 41 using base::Time; | 42 using base::Time; |
| 42 using content::ResourceType; | 43 using content::ResourceType; |
| 43 using net::cookie_util::ParsedRequestCookie; | 44 using net::cookie_util::ParsedRequestCookie; |
| 44 using net::cookie_util::ParsedRequestCookies; | 45 using net::cookie_util::ParsedRequestCookies; |
| (...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 437 | 438 |
| 438 void MergeCancelOfResponses( | 439 void MergeCancelOfResponses( |
| 439 const EventResponseDeltas& deltas, | 440 const EventResponseDeltas& deltas, |
| 440 bool* canceled, | 441 bool* canceled, |
| 441 const net::BoundNetLog* net_log) { | 442 const net::BoundNetLog* net_log) { |
| 442 for (EventResponseDeltas::const_iterator i = deltas.begin(); | 443 for (EventResponseDeltas::const_iterator i = deltas.begin(); |
| 443 i != deltas.end(); ++i) { | 444 i != deltas.end(); ++i) { |
| 444 if ((*i)->cancel) { | 445 if ((*i)->cancel) { |
| 445 *canceled = true; | 446 *canceled = true; |
| 446 net_log->AddEvent( | 447 net_log->AddEvent( |
| 447 net::NetLog::TYPE_CHROME_EXTENSION_ABORTED_REQUEST, | 448 net::NetLogEventType::CHROME_EXTENSION_ABORTED_REQUEST, |
| 448 CreateNetLogExtensionIdCallback(i->get())); | 449 CreateNetLogExtensionIdCallback(i->get())); |
| 449 break; | 450 break; |
| 450 } | 451 } |
| 451 } | 452 } |
| 452 } | 453 } |
| 453 | 454 |
| 454 // Helper function for MergeRedirectUrlOfResponses() that allows ignoring | 455 // Helper function for MergeRedirectUrlOfResponses() that allows ignoring |
| 455 // all redirects but those to data:// urls and about:blank. This is important | 456 // all redirects but those to data:// urls and about:blank. This is important |
| 456 // to treat these URLs as "cancel urls", i.e. URLs that extensions redirect | 457 // to treat these URLs as "cancel urls", i.e. URLs that extensions redirect |
| 457 // to if they want to express that they want to cancel a request. This reduces | 458 // to if they want to express that they want to cancel a request. This reduces |
| (...skipping 18 matching lines...) Expand all Loading... |
| 476 !(*delta)->new_url.SchemeIs(url::kDataScheme) && | 477 !(*delta)->new_url.SchemeIs(url::kDataScheme) && |
| 477 (*delta)->new_url.spec() != "about:blank") { | 478 (*delta)->new_url.spec() != "about:blank") { |
| 478 continue; | 479 continue; |
| 479 } | 480 } |
| 480 | 481 |
| 481 if (!redirected || *new_url == (*delta)->new_url) { | 482 if (!redirected || *new_url == (*delta)->new_url) { |
| 482 *new_url = (*delta)->new_url; | 483 *new_url = (*delta)->new_url; |
| 483 winning_extension_id = (*delta)->extension_id; | 484 winning_extension_id = (*delta)->extension_id; |
| 484 redirected = true; | 485 redirected = true; |
| 485 net_log->AddEvent( | 486 net_log->AddEvent( |
| 486 net::NetLog::TYPE_CHROME_EXTENSION_REDIRECTED_REQUEST, | 487 net::NetLogEventType::CHROME_EXTENSION_REDIRECTED_REQUEST, |
| 487 CreateNetLogExtensionIdCallback(delta->get())); | 488 CreateNetLogExtensionIdCallback(delta->get())); |
| 488 } else { | 489 } else { |
| 489 conflicting_extensions->insert( | 490 conflicting_extensions->insert( |
| 490 extensions::Warning::CreateRedirectConflictWarning( | 491 extensions::Warning::CreateRedirectConflictWarning( |
| 491 (*delta)->extension_id, | 492 (*delta)->extension_id, |
| 492 winning_extension_id, | 493 winning_extension_id, |
| 493 (*delta)->new_url, | 494 (*delta)->new_url, |
| 494 *new_url)); | 495 *new_url)); |
| 495 net_log->AddEvent( | 496 net_log->AddEvent( |
| 496 net::NetLog::TYPE_CHROME_EXTENSION_IGNORED_DUE_TO_CONFLICT, | 497 net::NetLogEventType::CHROME_EXTENSION_IGNORED_DUE_TO_CONFLICT, |
| 497 CreateNetLogExtensionIdCallback(delta->get())); | 498 CreateNetLogExtensionIdCallback(delta->get())); |
| 498 } | 499 } |
| 499 } | 500 } |
| 500 return redirected; | 501 return redirected; |
| 501 } | 502 } |
| 502 | 503 |
| 503 void MergeRedirectUrlOfResponses( | 504 void MergeRedirectUrlOfResponses( |
| 504 const EventResponseDeltas& deltas, | 505 const EventResponseDeltas& deltas, |
| 505 GURL* new_url, | 506 GURL* new_url, |
| 506 extensions::WarningSet* conflicting_extensions, | 507 extensions::WarningSet* conflicting_extensions, |
| (...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 812 { | 813 { |
| 813 std::vector<std::string>::iterator key; | 814 std::vector<std::string>::iterator key; |
| 814 for (key = (*delta)->deleted_request_headers.begin(); | 815 for (key = (*delta)->deleted_request_headers.begin(); |
| 815 key != (*delta)->deleted_request_headers.end(); | 816 key != (*delta)->deleted_request_headers.end(); |
| 816 ++key) { | 817 ++key) { |
| 817 request_headers->RemoveHeader(*key); | 818 request_headers->RemoveHeader(*key); |
| 818 removed_headers.insert(*key); | 819 removed_headers.insert(*key); |
| 819 } | 820 } |
| 820 } | 821 } |
| 821 net_log->AddEvent( | 822 net_log->AddEvent( |
| 822 net::NetLog::TYPE_CHROME_EXTENSION_MODIFIED_HEADERS, | 823 net::NetLogEventType::CHROME_EXTENSION_MODIFIED_HEADERS, |
| 823 base::Bind(&NetLogModificationCallback, delta->get())); | 824 base::Bind(&NetLogModificationCallback, delta->get())); |
| 824 } else { | 825 } else { |
| 825 conflicting_extensions->insert( | 826 conflicting_extensions->insert( |
| 826 extensions::Warning::CreateRequestHeaderConflictWarning( | 827 extensions::Warning::CreateRequestHeaderConflictWarning( |
| 827 (*delta)->extension_id, winning_extension_id, | 828 (*delta)->extension_id, winning_extension_id, |
| 828 conflicting_header)); | 829 conflicting_header)); |
| 829 net_log->AddEvent( | 830 net_log->AddEvent( |
| 830 net::NetLog::TYPE_CHROME_EXTENSION_IGNORED_DUE_TO_CONFLICT, | 831 net::NetLogEventType::CHROME_EXTENSION_IGNORED_DUE_TO_CONFLICT, |
| 831 CreateNetLogExtensionIdCallback(delta->get())); | 832 CreateNetLogExtensionIdCallback(delta->get())); |
| 832 } | 833 } |
| 833 } | 834 } |
| 834 | 835 |
| 835 MergeCookiesInOnBeforeSendHeadersResponses(deltas, request_headers, | 836 MergeCookiesInOnBeforeSendHeadersResponses(deltas, request_headers, |
| 836 conflicting_extensions, net_log); | 837 conflicting_extensions, net_log); |
| 837 } | 838 } |
| 838 | 839 |
| 839 // Retrives all cookies from |override_response_headers|. | 840 // Retrives all cookies from |override_response_headers|. |
| 840 static ParsedResponseCookies GetResponseCookies( | 841 static ParsedResponseCookies GetResponseCookies( |
| (...skipping 304 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1145 for (i = (*delta)->added_response_headers.begin(); | 1146 for (i = (*delta)->added_response_headers.begin(); |
| 1146 i != (*delta)->added_response_headers.end(); ++i) { | 1147 i != (*delta)->added_response_headers.end(); ++i) { |
| 1147 ResponseHeader lowercase_header(ToLowerCase(*i)); | 1148 ResponseHeader lowercase_header(ToLowerCase(*i)); |
| 1148 if (added_headers.find(lowercase_header) != added_headers.end()) | 1149 if (added_headers.find(lowercase_header) != added_headers.end()) |
| 1149 continue; | 1150 continue; |
| 1150 added_headers.insert(lowercase_header); | 1151 added_headers.insert(lowercase_header); |
| 1151 (*override_response_headers)->AddHeader(i->first + ": " + i->second); | 1152 (*override_response_headers)->AddHeader(i->first + ": " + i->second); |
| 1152 } | 1153 } |
| 1153 } | 1154 } |
| 1154 net_log->AddEvent( | 1155 net_log->AddEvent( |
| 1155 net::NetLog::TYPE_CHROME_EXTENSION_MODIFIED_HEADERS, | 1156 net::NetLogEventType::CHROME_EXTENSION_MODIFIED_HEADERS, |
| 1156 CreateNetLogExtensionIdCallback(delta->get())); | 1157 CreateNetLogExtensionIdCallback(delta->get())); |
| 1157 } else { | 1158 } else { |
| 1158 conflicting_extensions->insert( | 1159 conflicting_extensions->insert( |
| 1159 extensions::Warning::CreateResponseHeaderConflictWarning( | 1160 extensions::Warning::CreateResponseHeaderConflictWarning( |
| 1160 (*delta)->extension_id, winning_extension_id, | 1161 (*delta)->extension_id, winning_extension_id, |
| 1161 conflicting_header)); | 1162 conflicting_header)); |
| 1162 net_log->AddEvent( | 1163 net_log->AddEvent( |
| 1163 net::NetLog::TYPE_CHROME_EXTENSION_IGNORED_DUE_TO_CONFLICT, | 1164 net::NetLogEventType::CHROME_EXTENSION_IGNORED_DUE_TO_CONFLICT, |
| 1164 CreateNetLogExtensionIdCallback(delta->get())); | 1165 CreateNetLogExtensionIdCallback(delta->get())); |
| 1165 } | 1166 } |
| 1166 } | 1167 } |
| 1167 | 1168 |
| 1168 MergeCookiesInOnHeadersReceivedResponses(deltas, original_response_headers, | 1169 MergeCookiesInOnHeadersReceivedResponses(deltas, original_response_headers, |
| 1169 override_response_headers, conflicting_extensions, net_log); | 1170 override_response_headers, conflicting_extensions, net_log); |
| 1170 | 1171 |
| 1171 GURL new_url; | 1172 GURL new_url; |
| 1172 MergeRedirectUrlOfResponses( | 1173 MergeRedirectUrlOfResponses( |
| 1173 deltas, &new_url, conflicting_extensions, net_log); | 1174 deltas, &new_url, conflicting_extensions, net_log); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 1202 continue; | 1203 continue; |
| 1203 bool different = | 1204 bool different = |
| 1204 auth_credentials->username() != | 1205 auth_credentials->username() != |
| 1205 (*delta)->auth_credentials->username() || | 1206 (*delta)->auth_credentials->username() || |
| 1206 auth_credentials->password() != (*delta)->auth_credentials->password(); | 1207 auth_credentials->password() != (*delta)->auth_credentials->password(); |
| 1207 if (credentials_set && different) { | 1208 if (credentials_set && different) { |
| 1208 conflicting_extensions->insert( | 1209 conflicting_extensions->insert( |
| 1209 extensions::Warning::CreateCredentialsConflictWarning( | 1210 extensions::Warning::CreateCredentialsConflictWarning( |
| 1210 (*delta)->extension_id, winning_extension_id)); | 1211 (*delta)->extension_id, winning_extension_id)); |
| 1211 net_log->AddEvent( | 1212 net_log->AddEvent( |
| 1212 net::NetLog::TYPE_CHROME_EXTENSION_IGNORED_DUE_TO_CONFLICT, | 1213 net::NetLogEventType::CHROME_EXTENSION_IGNORED_DUE_TO_CONFLICT, |
| 1213 CreateNetLogExtensionIdCallback(delta->get())); | 1214 CreateNetLogExtensionIdCallback(delta->get())); |
| 1214 } else { | 1215 } else { |
| 1215 net_log->AddEvent( | 1216 net_log->AddEvent( |
| 1216 net::NetLog::TYPE_CHROME_EXTENSION_PROVIDE_AUTH_CREDENTIALS, | 1217 net::NetLogEventType::CHROME_EXTENSION_PROVIDE_AUTH_CREDENTIALS, |
| 1217 CreateNetLogExtensionIdCallback(delta->get())); | 1218 CreateNetLogExtensionIdCallback(delta->get())); |
| 1218 *auth_credentials = *(*delta)->auth_credentials; | 1219 *auth_credentials = *(*delta)->auth_credentials; |
| 1219 credentials_set = true; | 1220 credentials_set = true; |
| 1220 winning_extension_id = (*delta)->extension_id; | 1221 winning_extension_id = (*delta)->extension_id; |
| 1221 } | 1222 } |
| 1222 } | 1223 } |
| 1223 return credentials_set; | 1224 return credentials_set; |
| 1224 } | 1225 } |
| 1225 | 1226 |
| 1226 void ClearCacheOnNavigation() { | 1227 void ClearCacheOnNavigation() { |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1316 for (size_t i = 0; i < kResourceTypeStringsLength; ++i) { | 1317 for (size_t i = 0; i < kResourceTypeStringsLength; ++i) { |
| 1317 if (type_str == kResourceTypeStrings[i]) { | 1318 if (type_str == kResourceTypeStrings[i]) { |
| 1318 found = true; | 1319 found = true; |
| 1319 types->push_back(kResourceTypeValues[i]); | 1320 types->push_back(kResourceTypeValues[i]); |
| 1320 } | 1321 } |
| 1321 } | 1322 } |
| 1322 return found; | 1323 return found; |
| 1323 } | 1324 } |
| 1324 | 1325 |
| 1325 } // namespace extension_web_request_api_helpers | 1326 } // namespace extension_web_request_api_helpers |
| OLD | NEW |