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

Side by Side Diff: chrome/browser/extensions/api/web_request/web_request_api_unittest.cc

Issue 2495213007: [Extensions] Use a separate IPC message for extension events (Closed)
Patch Set: lazyboys Created 4 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
« no previous file with comments | « no previous file | extensions/browser/app_window/app_window_contents.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 <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
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
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, &param); 700 GetPartOfMessageArguments(message, &details, &param);
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
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, &param); 791 GetPartOfMessageArguments(message, &details, &param);
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
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, &param); 848 GetPartOfMessageArguments(message, &details, &param);
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
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
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
OLDNEW
« no previous file with comments | « no previous file | extensions/browser/app_window/app_window_contents.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698