OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 <queue> | 5 #include <queue> |
6 #include <map> | 6 #include <map> |
7 | 7 |
8 #include "base/bind.h" | 8 #include "base/bind.h" |
9 #include "base/callback.h" | 9 #include "base/callback.h" |
10 #include "base/file_util.h" | 10 #include "base/file_util.h" |
11 #include "base/json/json_value_serializer.h" | 11 #include "base/json/json_value_serializer.h" |
| 12 #include "base/memory/weak_ptr.h" |
12 #include "base/path_service.h" | 13 #include "base/path_service.h" |
13 #include "base/stl_util.h" | 14 #include "base/stl_util.h" |
14 #include "base/utf_string_conversions.h" | 15 #include "base/utf_string_conversions.h" |
15 #include "chrome/browser/extensions/extension_event_router_forwarder.h" | 16 #include "chrome/browser/extensions/extension_event_router_forwarder.h" |
16 #include "chrome/browser/extensions/extension_webrequest_api.h" | 17 #include "chrome/browser/extensions/extension_webrequest_api.h" |
17 #include "chrome/browser/extensions/extension_webrequest_api_constants.h" | 18 #include "chrome/browser/extensions/extension_webrequest_api_constants.h" |
18 #include "chrome/browser/extensions/extension_webrequest_api_helpers.h" | 19 #include "chrome/browser/extensions/extension_webrequest_api_helpers.h" |
19 #include "chrome/browser/net/chrome_network_delegate.h" | 20 #include "chrome/browser/net/chrome_network_delegate.h" |
20 #include "chrome/browser/prefs/pref_member.h" | 21 #include "chrome/browser/prefs/pref_member.h" |
21 #include "chrome/common/extensions/extension_messages.h" | 22 #include "chrome/common/extensions/extension_messages.h" |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
55 } // namespace | 56 } // namespace |
56 | 57 |
57 // A mock event router that responds to events with a pre-arranged queue of | 58 // A mock event router that responds to events with a pre-arranged queue of |
58 // Tasks. | 59 // Tasks. |
59 class TestIPCSender : public IPC::Message::Sender { | 60 class TestIPCSender : public IPC::Message::Sender { |
60 public: | 61 public: |
61 typedef std::list<linked_ptr<IPC::Message> > SentMessages; | 62 typedef std::list<linked_ptr<IPC::Message> > SentMessages; |
62 | 63 |
63 // Adds a Task to the queue. We will fire these in order as events are | 64 // Adds a Task to the queue. We will fire these in order as events are |
64 // dispatched. | 65 // dispatched. |
65 void PushTask(base::Closure task) { | 66 void PushTask(const base::Closure& task) { |
66 task_queue_.push(task); | 67 task_queue_.push(task); |
67 } | 68 } |
68 | 69 |
69 size_t GetNumTasks() { return task_queue_.size(); } | 70 size_t GetNumTasks() { return task_queue_.size(); } |
70 | 71 |
71 SentMessages::const_iterator sent_begin() const { | 72 SentMessages::const_iterator sent_begin() const { |
72 return sent_messages_.begin(); | 73 return sent_messages_.begin(); |
73 } | 74 } |
74 | 75 |
75 SentMessages::const_iterator sent_end() const { | 76 SentMessages::const_iterator sent_end() const { |
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
354 TestingProfile profile_; | 355 TestingProfile profile_; |
355 TestDelegate delegate_; | 356 TestDelegate delegate_; |
356 BooleanPrefMember enable_referrers_; | 357 BooleanPrefMember enable_referrers_; |
357 TestIPCSender ipc_sender_; | 358 TestIPCSender ipc_sender_; |
358 scoped_refptr<ExtensionEventRouterForwarder> event_router_; | 359 scoped_refptr<ExtensionEventRouterForwarder> event_router_; |
359 scoped_refptr<ExtensionInfoMap> extension_info_map_; | 360 scoped_refptr<ExtensionInfoMap> extension_info_map_; |
360 scoped_ptr<ChromeNetworkDelegate> network_delegate_; | 361 scoped_ptr<ChromeNetworkDelegate> network_delegate_; |
361 scoped_refptr<TestURLRequestContext> context_; | 362 scoped_refptr<TestURLRequestContext> context_; |
362 }; | 363 }; |
363 | 364 |
364 static void DoNothing() { | |
365 } | |
366 | |
367 TEST_P(ExtensionWebRequestHeaderModificationTest, TestModifications) { | 365 TEST_P(ExtensionWebRequestHeaderModificationTest, TestModifications) { |
368 std::string extension1_id("1"); | 366 std::string extension1_id("1"); |
369 std::string extension2_id("2"); | 367 std::string extension2_id("2"); |
370 std::string extension3_id("3"); | 368 std::string extension3_id("3"); |
371 ExtensionWebRequestEventRouter::RequestFilter filter; | 369 ExtensionWebRequestEventRouter::RequestFilter filter; |
372 const std::string kEventName(keys::kOnBeforeSendHeaders); | 370 const std::string kEventName(keys::kOnBeforeSendHeaders); |
373 base::WeakPtrFactory<TestIPCSender> ipc_sender_factory(&ipc_sender_); | 371 base::WeakPtrFactory<TestIPCSender> ipc_sender_factory(&ipc_sender_); |
374 | 372 |
375 // Install two extensions that can modify headers. Extension 2 has | 373 // Install two extensions that can modify headers. Extension 2 has |
376 // higher precedence than extension 1. | 374 // higher precedence than extension 1. |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
432 ipc_sender_.PushTask( | 430 ipc_sender_.PushTask( |
433 base::Bind(&EventHandledOnIOThread, | 431 base::Bind(&EventHandledOnIOThread, |
434 &profile_, mod.extension_id == 1 ? extension1_id : extension2_id, | 432 &profile_, mod.extension_id == 1 ? extension1_id : extension2_id, |
435 kEventName, kEventName + (mod.extension_id == 1 ? "/1" : "/2"), | 433 kEventName, kEventName + (mod.extension_id == 1 ? "/1" : "/2"), |
436 request.identifier(), response)); | 434 request.identifier(), response)); |
437 response = NULL; | 435 response = NULL; |
438 } | 436 } |
439 } | 437 } |
440 | 438 |
441 // Don't do anything for the onSendHeaders message. | 439 // Don't do anything for the onSendHeaders message. |
442 ipc_sender_.PushTask(base::Bind(&DoNothing)); | 440 ipc_sender_.PushTask(base::Bind(&base::DoNothing)); |
443 | 441 |
444 // Note that we mess up the headers slightly: | 442 // Note that we mess up the headers slightly: |
445 // request.Start() will first add additional headers (e.g. the User-Agent) | 443 // request.Start() will first add additional headers (e.g. the User-Agent) |
446 // and then send an event to the extension. When we have prepared our | 444 // and then send an event to the extension. When we have prepared our |
447 // answers to the onBeforeSendHeaders events above, these headers did not | 445 // answers to the onBeforeSendHeaders events above, these headers did not |
448 // exists and are therefore not listed in the responses. This makes | 446 // exists and are therefore not listed in the responses. This makes |
449 // them seem deleted. | 447 // them seem deleted. |
450 request.Start(); | 448 request.Start(); |
451 MessageLoop::current()->Run(); | 449 MessageLoop::current()->Run(); |
452 | 450 |
(...skipping 898 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1351 credentials_set = MergeOnAuthRequiredResponses( | 1349 credentials_set = MergeOnAuthRequiredResponses( |
1352 deltas, &auth3, &conflicting_extensions, &event_log); | 1350 deltas, &auth3, &conflicting_extensions, &event_log); |
1353 EXPECT_TRUE(credentials_set); | 1351 EXPECT_TRUE(credentials_set); |
1354 EXPECT_FALSE(auth3.Empty()); | 1352 EXPECT_FALSE(auth3.Empty()); |
1355 EXPECT_EQ(username, auth1.username()); | 1353 EXPECT_EQ(username, auth1.username()); |
1356 EXPECT_EQ(password, auth1.password()); | 1354 EXPECT_EQ(password, auth1.password()); |
1357 EXPECT_EQ(1u, conflicting_extensions.size()); | 1355 EXPECT_EQ(1u, conflicting_extensions.size()); |
1358 EXPECT_TRUE(ContainsKey(conflicting_extensions, "extid2")); | 1356 EXPECT_TRUE(ContainsKey(conflicting_extensions, "extid2")); |
1359 EXPECT_EQ(3u, event_log.size()); | 1357 EXPECT_EQ(3u, event_log.size()); |
1360 } | 1358 } |
OLD | NEW |