| 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 <stddef.h> | 5 #include <stddef.h> |
| 6 #include <stdint.h> | 6 #include <stdint.h> |
| 7 | 7 |
| 8 #include <map> | 8 #include <map> |
| 9 #include <memory> | 9 #include <memory> |
| 10 #include <queue> | 10 #include <queue> |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 119 const std::string& extension_id) { | 119 const std::string& extension_id) { |
| 120 for (WarningSet::const_iterator i = warnings.begin(); | 120 for (WarningSet::const_iterator i = warnings.begin(); |
| 121 i != warnings.end(); ++i) { | 121 i != warnings.end(); ++i) { |
| 122 if (i->extension_id() == extension_id) | 122 if (i->extension_id() == extension_id) |
| 123 return true; | 123 return true; |
| 124 } | 124 } |
| 125 return false; | 125 return false; |
| 126 } | 126 } |
| 127 | 127 |
| 128 // Parses the JSON data attached to the |message| and tries to return it. | 128 // Parses the JSON data attached to the |message| and tries to return it. |
| 129 // |param| must outlive |out|. Returns NULL on failure. | 129 // |param| must outlive |out|. |
| 130 void GetPartOfMessageArguments(IPC::Message* message, | 130 void GetPartOfMessageArguments(IPC::Message* message, |
| 131 const base::DictionaryValue** out, | 131 const base::DictionaryValue** out, |
| 132 ExtensionMsg_MessageInvoke::Param* param) { | 132 ExtensionMsg_DispatchEvent::Param* param) { |
| 133 ASSERT_EQ(ExtensionMsg_MessageInvoke::ID, message->type()); | 133 ASSERT_EQ(ExtensionMsg_DispatchEvent::ID, message->type()); |
| 134 ASSERT_TRUE(ExtensionMsg_MessageInvoke::Read(message, param)); | 134 ASSERT_TRUE(ExtensionMsg_DispatchEvent::Read(message, param)); |
| 135 ASSERT_GE(std::get<3>(*param).GetSize(), 2u); | 135 const base::ListValue& list = std::get<1>(*param); |
| 136 const base::Value* value = NULL; | 136 ASSERT_EQ(1u, list.GetSize()); |
| 137 ASSERT_TRUE(std::get<3>(*param).Get(1, &value)); | 137 ASSERT_TRUE(list.GetDictionary(0, out)); |
| 138 const base::ListValue* list = NULL; | |
| 139 ASSERT_TRUE(value->GetAsList(&list)); | |
| 140 ASSERT_EQ(1u, list->GetSize()); | |
| 141 ASSERT_TRUE(list->GetDictionary(0, out)); | |
| 142 } | 138 } |
| 143 | 139 |
| 144 } // namespace | 140 } // namespace |
| 145 | 141 |
| 146 // A mock event router that responds to events with a pre-arranged queue of | 142 // A mock event router that responds to events with a pre-arranged queue of |
| 147 // Tasks. | 143 // Tasks. |
| 148 class TestIPCSender : public IPC::Sender { | 144 class TestIPCSender : public IPC::Sender { |
| 149 public: | 145 public: |
| 150 typedef std::list<linked_ptr<IPC::Message> > SentMessages; | 146 typedef std::list<linked_ptr<IPC::Message> > SentMessages; |
| 151 | 147 |
| 152 // Adds a Task to the queue. We will fire these in order as events are | 148 // Adds a Task to the queue. We will fire these in order as events are |
| 153 // dispatched. | 149 // dispatched. |
| 154 void PushTask(const base::Closure& task) { | 150 void PushTask(const base::Closure& task) { |
| 155 task_queue_.push(task); | 151 task_queue_.push(task); |
| 156 } | 152 } |
| 157 | 153 |
| 158 size_t GetNumTasks() { return task_queue_.size(); } | 154 size_t GetNumTasks() { return task_queue_.size(); } |
| 159 | 155 |
| 160 SentMessages::const_iterator sent_begin() const { | 156 SentMessages::const_iterator sent_begin() const { |
| 161 return sent_messages_.begin(); | 157 return sent_messages_.begin(); |
| 162 } | 158 } |
| 163 | 159 |
| 164 SentMessages::const_iterator sent_end() const { | 160 SentMessages::const_iterator sent_end() const { |
| 165 return sent_messages_.end(); | 161 return sent_messages_.end(); |
| 166 } | 162 } |
| 167 | 163 |
| 168 private: | 164 private: |
| 169 // IPC::Sender | 165 // IPC::Sender |
| 170 bool Send(IPC::Message* message) override { | 166 bool Send(IPC::Message* message) override { |
| 171 EXPECT_EQ(ExtensionMsg_MessageInvoke::ID, message->type()); | 167 EXPECT_EQ(ExtensionMsg_DispatchEvent::ID, message->type()); |
| 172 | 168 |
| 173 EXPECT_FALSE(task_queue_.empty()); | 169 EXPECT_FALSE(task_queue_.empty()); |
| 174 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, | 170 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, |
| 175 task_queue_.front()); | 171 task_queue_.front()); |
| 176 task_queue_.pop(); | 172 task_queue_.pop(); |
| 177 | 173 |
| 178 sent_messages_.push_back(linked_ptr<IPC::Message>(message)); | 174 sent_messages_.push_back(linked_ptr<IPC::Message>(message)); |
| 179 return true; | 175 return true; |
| 180 } | 176 } |
| 181 | 177 |
| (...skipping 510 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 692 // Clean-up. | 688 // Clean-up. |
| 693 ExtensionWebRequestEventRouter::GetInstance()->RemoveEventListener(id1, | 689 ExtensionWebRequestEventRouter::GetInstance()->RemoveEventListener(id1, |
| 694 false); | 690 false); |
| 695 | 691 |
| 696 IPC::Message* message = NULL; | 692 IPC::Message* message = NULL; |
| 697 TestIPCSender::SentMessages::const_iterator i = ipc_sender_.sent_begin(); | 693 TestIPCSender::SentMessages::const_iterator i = ipc_sender_.sent_begin(); |
| 698 for (size_t test = 0; test < arraysize(kExpected); ++test) { | 694 for (size_t test = 0; test < arraysize(kExpected); ++test) { |
| 699 SCOPED_TRACE(testing::Message("iteration number ") << test); | 695 SCOPED_TRACE(testing::Message("iteration number ") << test); |
| 700 EXPECT_NE(i, ipc_sender_.sent_end()); | 696 EXPECT_NE(i, ipc_sender_.sent_end()); |
| 701 message = (i++)->get(); | 697 message = (i++)->get(); |
| 702 const base::DictionaryValue* details; | 698 const base::DictionaryValue* details = nullptr; |
| 703 ExtensionMsg_MessageInvoke::Param param; | 699 ExtensionMsg_DispatchEvent::Param param; |
| 704 GetPartOfMessageArguments(message, &details, ¶m); | 700 GetPartOfMessageArguments(message, &details, ¶m); |
| 705 ASSERT_TRUE(details != NULL); | 701 ASSERT_TRUE(details != NULL); |
| 706 const base::Value* result = NULL; | 702 const base::Value* result = NULL; |
| 707 if (kExpected[test]) { | 703 if (kExpected[test]) { |
| 708 EXPECT_TRUE(details->Get(*(kPath[test]), &result)); | 704 EXPECT_TRUE(details->Get(*(kPath[test]), &result)); |
| 709 EXPECT_TRUE(kExpected[test]->Equals(result)); | 705 EXPECT_TRUE(kExpected[test]->Equals(result)); |
| 710 } else { | 706 } else { |
| 711 EXPECT_FALSE(details->Get(*(kPath[test]), &result)); | 707 EXPECT_FALSE(details->Get(*(kPath[test]), &result)); |
| 712 } | 708 } |
| 713 } | 709 } |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 784 ExtensionWebRequestEventRouter::GetInstance()->RemoveEventListener(id4, | 780 ExtensionWebRequestEventRouter::GetInstance()->RemoveEventListener(id4, |
| 785 false); | 781 false); |
| 786 | 782 |
| 787 TestIPCSender::SentMessages::const_iterator i = ipc_sender_.sent_begin(); | 783 TestIPCSender::SentMessages::const_iterator i = ipc_sender_.sent_begin(); |
| 788 | 784 |
| 789 for (size_t test = 0; test < arraysize(kExpected); ++test, ++i) { | 785 for (size_t test = 0; test < arraysize(kExpected); ++test, ++i) { |
| 790 SCOPED_TRACE(testing::Message("iteration number ") << test); | 786 SCOPED_TRACE(testing::Message("iteration number ") << test); |
| 791 EXPECT_NE(i, ipc_sender_.sent_end()); | 787 EXPECT_NE(i, ipc_sender_.sent_end()); |
| 792 IPC::Message* message = i->get(); | 788 IPC::Message* message = i->get(); |
| 793 const base::DictionaryValue* details = nullptr; | 789 const base::DictionaryValue* details = nullptr; |
| 794 ExtensionMsg_MessageInvoke::Param param; | 790 ExtensionMsg_DispatchEvent::Param param; |
| 795 GetPartOfMessageArguments(message, &details, ¶m); | 791 GetPartOfMessageArguments(message, &details, ¶m); |
| 796 ASSERT_TRUE(details != nullptr); | 792 ASSERT_TRUE(details != nullptr); |
| 797 EXPECT_EQ(kExpected[test], details->HasKey(keys::kRequestBodyKey)); | 793 EXPECT_EQ(kExpected[test], details->HasKey(keys::kRequestBodyKey)); |
| 798 } | 794 } |
| 799 | 795 |
| 800 EXPECT_EQ(i, ipc_sender_.sent_end()); | 796 EXPECT_EQ(i, ipc_sender_.sent_end()); |
| 801 } | 797 } |
| 802 | 798 |
| 803 TEST_F(ExtensionWebRequestTest, NoAccessRequestBodyData) { | 799 TEST_F(ExtensionWebRequestTest, NoAccessRequestBodyData) { |
| 804 // We verify that URLRequest body is NOT accessible to OnBeforeRequest | 800 // We verify that URLRequest body is NOT accessible to OnBeforeRequest |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 840 ExtensionWebRequestEventRouter::EventListener::ID id1( | 836 ExtensionWebRequestEventRouter::EventListener::ID id1( |
| 841 &profile_, extension_id, kEventName + "/1", 0, 0); | 837 &profile_, extension_id, kEventName + "/1", 0, 0); |
| 842 ExtensionWebRequestEventRouter::GetInstance()->RemoveEventListener(id1, | 838 ExtensionWebRequestEventRouter::GetInstance()->RemoveEventListener(id1, |
| 843 false); | 839 false); |
| 844 | 840 |
| 845 TestIPCSender::SentMessages::const_iterator i = ipc_sender_.sent_begin(); | 841 TestIPCSender::SentMessages::const_iterator i = ipc_sender_.sent_begin(); |
| 846 for (size_t test = 0; test < arraysize(kMethods); ++test, ++i) { | 842 for (size_t test = 0; test < arraysize(kMethods); ++test, ++i) { |
| 847 SCOPED_TRACE(testing::Message("iteration number ") << test); | 843 SCOPED_TRACE(testing::Message("iteration number ") << test); |
| 848 EXPECT_NE(i, ipc_sender_.sent_end()); | 844 EXPECT_NE(i, ipc_sender_.sent_end()); |
| 849 IPC::Message* message = i->get(); | 845 IPC::Message* message = i->get(); |
| 850 const base::DictionaryValue* details = NULL; | 846 const base::DictionaryValue* details = nullptr; |
| 851 ExtensionMsg_MessageInvoke::Param param; | 847 ExtensionMsg_DispatchEvent::Param param; |
| 852 GetPartOfMessageArguments(message, &details, ¶m); | 848 GetPartOfMessageArguments(message, &details, ¶m); |
| 853 ASSERT_TRUE(details != NULL); | 849 ASSERT_TRUE(details != NULL); |
| 854 EXPECT_FALSE(details->HasKey(keys::kRequestBodyKey)); | 850 EXPECT_FALSE(details->HasKey(keys::kRequestBodyKey)); |
| 855 } | 851 } |
| 856 | 852 |
| 857 EXPECT_EQ(i, ipc_sender_.sent_end()); | 853 EXPECT_EQ(i, ipc_sender_.sent_end()); |
| 858 } | 854 } |
| 859 | 855 |
| 860 // Tests that |embedder_process_id| is not relevant for adding and removing | 856 // Tests that |embedder_process_id| is not relevant for adding and removing |
| 861 // listeners with |web_view_instance_id| = 0. | 857 // listeners with |web_view_instance_id| = 0. |
| (...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1131 } | 1127 } |
| 1132 | 1128 |
| 1133 // Counter for the number of observed onSendHeaders events. | 1129 // Counter for the number of observed onSendHeaders events. |
| 1134 int num_headers_observed = 0; | 1130 int num_headers_observed = 0; |
| 1135 | 1131 |
| 1136 // Search the onSendHeaders signal in the IPC messages and check that | 1132 // Search the onSendHeaders signal in the IPC messages and check that |
| 1137 // it contained the correct headers. | 1133 // it contained the correct headers. |
| 1138 TestIPCSender::SentMessages::const_iterator i; | 1134 TestIPCSender::SentMessages::const_iterator i; |
| 1139 for (i = ipc_sender_.sent_begin(); i != ipc_sender_.sent_end(); ++i) { | 1135 for (i = ipc_sender_.sent_begin(); i != ipc_sender_.sent_end(); ++i) { |
| 1140 IPC::Message* message = i->get(); | 1136 IPC::Message* message = i->get(); |
| 1141 if (ExtensionMsg_MessageInvoke::ID != message->type()) | 1137 if (ExtensionMsg_DispatchEvent::ID != message->type()) |
| 1142 continue; | 1138 continue; |
| 1143 ExtensionMsg_MessageInvoke::Param message_tuple; | 1139 ExtensionMsg_DispatchEvent::Param message_tuple; |
| 1144 ExtensionMsg_MessageInvoke::Read(message, &message_tuple); | 1140 ExtensionMsg_DispatchEvent::Read(message, &message_tuple); |
| 1145 base::ListValue& args = std::get<3>(message_tuple); | 1141 const ExtensionMsg_DispatchEvent_Params& params = |
| 1142 std::get<0>(message_tuple); |
| 1146 | 1143 |
| 1147 std::string event_name; | 1144 if (params.event_name != std::string(keys::kOnSendHeadersEvent) + "/3") |
| 1148 if (!args.GetString(0, &event_name) || | |
| 1149 event_name != std::string(keys::kOnSendHeadersEvent) + "/3") { | |
| 1150 continue; | 1145 continue; |
| 1151 } | |
| 1152 | 1146 |
| 1153 base::ListValue* event_arg = NULL; | 1147 const base::ListValue& event_args = std::get<1>(message_tuple); |
| 1154 ASSERT_TRUE(args.GetList(1, &event_arg)); | 1148 const base::DictionaryValue* event_arg_dict = nullptr; |
| 1149 ASSERT_TRUE(event_args.GetDictionary(0, &event_arg_dict)); |
| 1155 | 1150 |
| 1156 base::DictionaryValue* event_arg_dict = NULL; | 1151 const base::ListValue* request_headers = nullptr; |
| 1157 ASSERT_TRUE(event_arg->GetDictionary(0, &event_arg_dict)); | |
| 1158 | |
| 1159 base::ListValue* request_headers = NULL; | |
| 1160 ASSERT_TRUE(event_arg_dict->GetList(keys::kRequestHeadersKey, | 1152 ASSERT_TRUE(event_arg_dict->GetList(keys::kRequestHeadersKey, |
| 1161 &request_headers)); | 1153 &request_headers)); |
| 1162 | 1154 |
| 1163 net::HttpRequestHeaders observed_headers; | 1155 net::HttpRequestHeaders observed_headers; |
| 1164 for (size_t j = 0; j < request_headers->GetSize(); ++j) { | 1156 for (size_t j = 0; j < request_headers->GetSize(); ++j) { |
| 1165 base::DictionaryValue* header = NULL; | 1157 const base::DictionaryValue* header = nullptr; |
| 1166 ASSERT_TRUE(request_headers->GetDictionary(j, &header)); | 1158 ASSERT_TRUE(request_headers->GetDictionary(j, &header)); |
| 1167 std::string key; | 1159 std::string key; |
| 1168 std::string value; | 1160 std::string value; |
| 1169 ASSERT_TRUE(header->GetString(keys::kHeaderNameKey, &key)); | 1161 ASSERT_TRUE(header->GetString(keys::kHeaderNameKey, &key)); |
| 1170 ASSERT_TRUE(header->GetString(keys::kHeaderValueKey, &value)); | 1162 ASSERT_TRUE(header->GetString(keys::kHeaderValueKey, &value)); |
| 1171 observed_headers.SetHeader(key, value); | 1163 observed_headers.SetHeader(key, value); |
| 1172 } | 1164 } |
| 1173 | 1165 |
| 1174 EXPECT_EQ(expected_headers.ToString(), observed_headers.ToString()); | 1166 EXPECT_EQ(expected_headers.ToString(), observed_headers.ToString()); |
| 1175 ++num_headers_observed; | 1167 ++num_headers_observed; |
| (...skipping 1274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2450 EXPECT_TRUE(credentials_set); | 2442 EXPECT_TRUE(credentials_set); |
| 2451 EXPECT_FALSE(auth3.Empty()); | 2443 EXPECT_FALSE(auth3.Empty()); |
| 2452 EXPECT_EQ(username, auth1.username()); | 2444 EXPECT_EQ(username, auth1.username()); |
| 2453 EXPECT_EQ(password, auth1.password()); | 2445 EXPECT_EQ(password, auth1.password()); |
| 2454 EXPECT_EQ(1u, warning_set.size()); | 2446 EXPECT_EQ(1u, warning_set.size()); |
| 2455 EXPECT_TRUE(HasWarning(warning_set, "extid2")); | 2447 EXPECT_TRUE(HasWarning(warning_set, "extid2")); |
| 2456 EXPECT_EQ(3u, capturing_net_log.GetSize()); | 2448 EXPECT_EQ(3u, capturing_net_log.GetSize()); |
| 2457 } | 2449 } |
| 2458 | 2450 |
| 2459 } // namespace extensions | 2451 } // namespace extensions |
| OLD | NEW |