| Index: chrome/browser/extensions/api/web_request/web_request_api_unittest.cc
|
| diff --git a/chrome/browser/extensions/api/web_request/web_request_api_unittest.cc b/chrome/browser/extensions/api/web_request/web_request_api_unittest.cc
|
| index 8414d1f10694420f325eaa650c0cd475b84a65f7..3b672fe27e44a271e43eba1e0be2519b95d61505 100644
|
| --- a/chrome/browser/extensions/api/web_request/web_request_api_unittest.cc
|
| +++ b/chrome/browser/extensions/api/web_request/web_request_api_unittest.cc
|
| @@ -77,6 +77,7 @@ using helpers::CharListToString;
|
| using helpers::EventResponseDelta;
|
| using helpers::EventResponseDeltas;
|
| using helpers::EventResponseDeltas;
|
| +using helpers::ExtraInfoSpec;
|
| using helpers::InDecreasingExtensionInstallationTimeOrder;
|
| using helpers::MergeCancelOfResponses;
|
| using helpers::MergeOnBeforeRequestResponses;
|
| @@ -231,13 +232,11 @@ TEST_F(ExtensionWebRequestTest, BlockingEventPrecedenceRedirect) {
|
| base::WeakPtrFactory<TestIPCSender> ipc_sender_factory(&ipc_sender_);
|
| ExtensionWebRequestEventRouter::GetInstance()->AddEventListener(
|
| &profile_, extension1_id, extension1_id, events::FOR_TEST, kEventName,
|
| - kEventName + "/1", filter,
|
| - ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, 0, 0,
|
| + kEventName + "/1", filter, ExtraInfoSpec::BLOCKING, 0, 0,
|
| ipc_sender_factory.GetWeakPtr());
|
| ExtensionWebRequestEventRouter::GetInstance()->AddEventListener(
|
| &profile_, extension2_id, extension2_id, events::FOR_TEST, kEventName,
|
| - kEventName + "/2", filter,
|
| - ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, 0, 0,
|
| + kEventName + "/2", filter, ExtraInfoSpec::BLOCKING, 0, 0,
|
| ipc_sender_factory.GetWeakPtr());
|
|
|
| net::URLRequestJobFactoryImpl job_factory;
|
| @@ -370,13 +369,11 @@ TEST_F(ExtensionWebRequestTest, BlockingEventPrecedenceCancel) {
|
| base::WeakPtrFactory<TestIPCSender> ipc_sender_factory(&ipc_sender_);
|
| ExtensionWebRequestEventRouter::GetInstance()->AddEventListener(
|
| &profile_, extension1_id, extension1_id, events::FOR_TEST, kEventName,
|
| - kEventName + "/1", filter,
|
| - ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, 0, 0,
|
| + kEventName + "/1", filter, ExtraInfoSpec::BLOCKING, 0, 0,
|
| ipc_sender_factory.GetWeakPtr());
|
| ExtensionWebRequestEventRouter::GetInstance()->AddEventListener(
|
| &profile_, extension2_id, extension2_id, events::FOR_TEST, kEventName,
|
| - kEventName + "/2", filter,
|
| - ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, 0, 0,
|
| + kEventName + "/2", filter, ExtraInfoSpec::BLOCKING, 0, 0,
|
| ipc_sender_factory.GetWeakPtr());
|
|
|
| GURL request_url("about:blank");
|
| @@ -441,8 +438,7 @@ TEST_F(ExtensionWebRequestTest, SimulateChancelWhileBlocked) {
|
| base::WeakPtrFactory<TestIPCSender> ipc_sender_factory(&ipc_sender_);
|
| ExtensionWebRequestEventRouter::GetInstance()->AddEventListener(
|
| &profile_, extension_id, extension_id, events::FOR_TEST, kEventName,
|
| - kEventName + "/1", filter,
|
| - ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, 0, 0,
|
| + kEventName + "/1", filter, ExtraInfoSpec::BLOCKING, 0, 0,
|
| ipc_sender_factory.GetWeakPtr());
|
| ExtensionWebRequestEventRouter::GetInstance()->AddEventListener(
|
| &profile_, extension_id, extension_id, events::FOR_TEST, kEventName2,
|
| @@ -500,8 +496,7 @@ bool GenerateInfoSpec(const std::string& values, int* result) {
|
| base::SplitString(values, ",", base::KEEP_WHITESPACE,
|
| base::SPLIT_WANT_NONEMPTY))
|
| list_value.Append(new base::StringValue(cur));
|
| - return ExtensionWebRequestEventRouter::ExtraInfoSpec::InitFromValue(
|
| - list_value, result);
|
| + return ExtraInfoSpec::InitFromValue(list_value, result);
|
| }
|
|
|
| } // namespace
|
| @@ -703,6 +698,83 @@ TEST_F(ExtensionWebRequestTest, AccessRequestBodyData) {
|
| EXPECT_EQ(i, ipc_sender_.sent_end());
|
| }
|
|
|
| +// Tests whether requestBody is only present on the events that requested it.
|
| +TEST_F(ExtensionWebRequestTest, MinimalAccessRequestBodyData) {
|
| + const std::string kEventName(web_request::OnBeforeRequest::kEventName);
|
| + ExtensionWebRequestEventRouter::RequestFilter filter;
|
| + const std::string extension_id1("1");
|
| + const std::string extension_id2("2");
|
| + int extra_info_spec_body = 0;
|
| + int extra_info_spec_empty = 0;
|
| + ASSERT_TRUE(GenerateInfoSpec("requestBody", &extra_info_spec_body));
|
| + base::WeakPtrFactory<TestIPCSender> ipc_sender_factory(&ipc_sender_);
|
| +
|
| + bool kExpected[] = {
|
| + true,
|
| + false,
|
| + false,
|
| + true,
|
| + };
|
| +
|
| + // Extension 1 with requestBody spec.
|
| + ExtensionWebRequestEventRouter::GetInstance()->AddEventListener(
|
| + &profile_, extension_id1, extension_id1, events::FOR_TEST, kEventName,
|
| + kEventName + "/1", filter, extra_info_spec_body, 0, 0,
|
| + ipc_sender_factory.GetWeakPtr());
|
| +
|
| + // Extension 1 without requestBody spec.
|
| + ExtensionWebRequestEventRouter::GetInstance()->AddEventListener(
|
| + &profile_, extension_id1, extension_id1, events::FOR_TEST, kEventName,
|
| + kEventName + "/2", filter, extra_info_spec_empty, 0, 0,
|
| + ipc_sender_factory.GetWeakPtr());
|
| +
|
| + // Extension 2, without requestBody spec.
|
| + ExtensionWebRequestEventRouter::GetInstance()->AddEventListener(
|
| + &profile_, extension_id2, extension_id2, events::FOR_TEST, kEventName,
|
| + kEventName + "/1", filter, extra_info_spec_empty, 0, 0,
|
| + ipc_sender_factory.GetWeakPtr());
|
| +
|
| + // Extension 2, with requestBody spec.
|
| + ExtensionWebRequestEventRouter::GetInstance()->AddEventListener(
|
| + &profile_, extension_id2, extension_id2, events::FOR_TEST, kEventName,
|
| + kEventName + "/2", filter, extra_info_spec_body, 0, 0,
|
| + ipc_sender_factory.GetWeakPtr());
|
| +
|
| + // Only one request is sent, but more than one event will be triggered.
|
| + for (size_t i = 1; i < arraysize(kExpected); ++i)
|
| + ipc_sender_.PushTask(base::Bind(&base::DoNothing));
|
| +
|
| + const std::vector<char> part_of_body(1);
|
| + FireURLRequestWithData("POST", nullptr, part_of_body, part_of_body);
|
| +
|
| + base::MessageLoop::current()->RunUntilIdle();
|
| +
|
| + // Clean-up
|
| + ExtensionWebRequestEventRouter::GetInstance()->RemoveEventListener(
|
| + &profile_, extension_id1, kEventName + "/1", 0, 0);
|
| + ExtensionWebRequestEventRouter::GetInstance()->RemoveEventListener(
|
| + &profile_, extension_id2, kEventName + "/2", 0, 0);
|
| + ExtensionWebRequestEventRouter::GetInstance()->RemoveEventListener(
|
| + &profile_, extension_id1, kEventName + "/1", 0, 0);
|
| + ExtensionWebRequestEventRouter::GetInstance()->RemoveEventListener(
|
| + &profile_, extension_id2, kEventName + "/2", 0, 0);
|
| +
|
| + TestIPCSender::SentMessages::const_iterator i = ipc_sender_.sent_begin();
|
| +
|
| + for (size_t test = 0; test < arraysize(kExpected); ++test, ++i) {
|
| + SCOPED_TRACE(testing::Message("iteration number ") << test);
|
| + EXPECT_NE(i, ipc_sender_.sent_end());
|
| + IPC::Message* message = i->get();
|
| + const base::DictionaryValue* details = nullptr;
|
| + ExtensionMsg_MessageInvoke::Param param;
|
| + GetPartOfMessageArguments(message, &details, ¶m);
|
| + ASSERT_TRUE(details != nullptr);
|
| + EXPECT_EQ(kExpected[test], details->HasKey(keys::kRequestBodyKey));
|
| + }
|
| +
|
| + EXPECT_EQ(i, ipc_sender_.sent_end());
|
| +}
|
| +
|
| TEST_F(ExtensionWebRequestTest, NoAccessRequestBodyData) {
|
| // We verify that URLRequest body is NOT accessible to OnBeforeRequest
|
| // listeners when the type of the request is different from POST or PUT, or
|
| @@ -836,21 +908,19 @@ TEST_P(ExtensionWebRequestHeaderModificationTest, TestModifications) {
|
| // higher precedence than extension 1.
|
| ExtensionWebRequestEventRouter::GetInstance()->AddEventListener(
|
| &profile_, extension1_id, extension1_id, events::FOR_TEST, kEventName,
|
| - kEventName + "/1", filter,
|
| - ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, 0, 0,
|
| + kEventName + "/1", filter, ExtraInfoSpec::BLOCKING, 0, 0,
|
| ipc_sender_factory.GetWeakPtr());
|
| ExtensionWebRequestEventRouter::GetInstance()->AddEventListener(
|
| &profile_, extension2_id, extension2_id, events::FOR_TEST, kEventName,
|
| - kEventName + "/2", filter,
|
| - ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, 0, 0,
|
| + kEventName + "/2", filter, ExtraInfoSpec::BLOCKING, 0, 0,
|
| ipc_sender_factory.GetWeakPtr());
|
|
|
| // Install one extension that observes the final headers.
|
| ExtensionWebRequestEventRouter::GetInstance()->AddEventListener(
|
| &profile_, extension3_id, extension3_id, events::FOR_TEST,
|
| keys::kOnSendHeadersEvent, std::string(keys::kOnSendHeadersEvent) + "/3",
|
| - filter, ExtensionWebRequestEventRouter::ExtraInfoSpec::REQUEST_HEADERS, 0,
|
| - 0, ipc_sender_factory.GetWeakPtr());
|
| + filter, ExtraInfoSpec::REQUEST_HEADERS, 0, 0,
|
| + ipc_sender_factory.GetWeakPtr());
|
|
|
| GURL request_url("http://doesnotexist/does_not_exist.html");
|
| scoped_ptr<net::URLRequest> request(context_->CreateRequest(
|
| @@ -1000,30 +1070,29 @@ TEST_F(ExtensionWebRequestTest, InitFromValue) {
|
| TestInitFromValue(
|
| "requestHeaders",
|
| true,
|
| - ExtensionWebRequestEventRouter::ExtraInfoSpec::REQUEST_HEADERS);
|
| + ExtraInfoSpec::REQUEST_HEADERS);
|
| TestInitFromValue(
|
| "responseHeaders",
|
| true,
|
| - ExtensionWebRequestEventRouter::ExtraInfoSpec::RESPONSE_HEADERS);
|
| + ExtraInfoSpec::RESPONSE_HEADERS);
|
| TestInitFromValue(
|
| "blocking",
|
| true,
|
| - ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING);
|
| + ExtraInfoSpec::BLOCKING);
|
| TestInitFromValue(
|
| "asyncBlocking",
|
| true,
|
| - ExtensionWebRequestEventRouter::ExtraInfoSpec::ASYNC_BLOCKING);
|
| + ExtraInfoSpec::ASYNC_BLOCKING);
|
| TestInitFromValue(
|
| "requestBody",
|
| true,
|
| - ExtensionWebRequestEventRouter::ExtraInfoSpec::REQUEST_BODY);
|
| + ExtraInfoSpec::REQUEST_BODY);
|
|
|
| // Multiple valid values are bitwise-or'ed.
|
| TestInitFromValue(
|
| "requestHeaders,blocking",
|
| true,
|
| - ExtensionWebRequestEventRouter::ExtraInfoSpec::REQUEST_HEADERS |
|
| - ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING);
|
| + ExtraInfoSpec::REQUEST_HEADERS | ExtraInfoSpec::BLOCKING);
|
|
|
| // Any invalid values lead to a bad parse.
|
| TestInitFromValue("invalidValue", false, 0);
|
|
|