OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/renderer/native_extension_bindings_system.h" | 5 #include "extensions/renderer/native_extension_bindings_system.h" |
6 | 6 |
7 #include "base/memory/ptr_util.h" | 7 #include "base/memory/ptr_util.h" |
8 #include "base/run_loop.h" | 8 #include "base/run_loop.h" |
9 #include "base/strings/stringprintf.h" | 9 #include "base/strings/stringprintf.h" |
10 #include "components/crx_file/id_util.h" | 10 #include "components/crx_file/id_util.h" |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
61 | 61 |
62 return ExtensionBuilder() | 62 return ExtensionBuilder() |
63 .SetManifest(manifest.Build()) | 63 .SetManifest(manifest.Build()) |
64 .SetLocation(Manifest::INTERNAL) | 64 .SetLocation(Manifest::INTERNAL) |
65 .SetID(crx_file::id_util::GenerateId(name)) | 65 .SetID(crx_file::id_util::GenerateId(name)) |
66 .Build(); | 66 .Build(); |
67 } | 67 } |
68 | 68 |
69 class EventChangeHandler { | 69 class EventChangeHandler { |
70 public: | 70 public: |
71 MOCK_METHOD3(OnChange, | 71 MOCK_METHOD4(OnChange, |
72 void(binding::EventListenersChanged, | 72 void(binding::EventListenersChanged, |
73 ScriptContext*, | 73 ScriptContext*, |
74 const std::string& event_name)); | 74 const std::string& event_name, |
| 75 const base::DictionaryValue* filter)); |
75 }; | 76 }; |
76 | 77 |
77 } // namespace | 78 } // namespace |
78 | 79 |
79 class NativeExtensionBindingsSystemUnittest : public APIBindingTest { | 80 class NativeExtensionBindingsSystemUnittest : public APIBindingTest { |
80 public: | 81 public: |
81 NativeExtensionBindingsSystemUnittest() {} | 82 NativeExtensionBindingsSystemUnittest() {} |
82 ~NativeExtensionBindingsSystemUnittest() override {} | 83 ~NativeExtensionBindingsSystemUnittest() override {} |
83 | 84 |
84 protected: | 85 protected: |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
123 last_params_.source_url = params.source_url; | 124 last_params_.source_url = params.source_url; |
124 last_params_.request_id = params.request_id; | 125 last_params_.request_id = params.request_id; |
125 last_params_.has_callback = params.has_callback; | 126 last_params_.has_callback = params.has_callback; |
126 last_params_.user_gesture = params.user_gesture; | 127 last_params_.user_gesture = params.user_gesture; |
127 last_params_.worker_thread_id = params.worker_thread_id; | 128 last_params_.worker_thread_id = params.worker_thread_id; |
128 last_params_.service_worker_version_id = params.service_worker_version_id; | 129 last_params_.service_worker_version_id = params.service_worker_version_id; |
129 } | 130 } |
130 | 131 |
131 void MockSendListenerIPC(binding::EventListenersChanged changed, | 132 void MockSendListenerIPC(binding::EventListenersChanged changed, |
132 ScriptContext* context, | 133 ScriptContext* context, |
133 const std::string& event_name) { | 134 const std::string& event_name, |
| 135 const base::DictionaryValue* filter) { |
134 if (event_change_handler_) | 136 if (event_change_handler_) |
135 event_change_handler_->OnChange(changed, context, event_name); | 137 event_change_handler_->OnChange(changed, context, event_name, filter); |
136 } | 138 } |
137 | 139 |
138 ScriptContext* CreateScriptContext(v8::Local<v8::Context> v8_context, | 140 ScriptContext* CreateScriptContext(v8::Local<v8::Context> v8_context, |
139 Extension* extension, | 141 Extension* extension, |
140 Feature::Context context_type) { | 142 Feature::Context context_type) { |
141 auto script_context = base::MakeUnique<ScriptContext>( | 143 auto script_context = base::MakeUnique<ScriptContext>( |
142 v8_context, nullptr, extension, context_type, extension, context_type); | 144 v8_context, nullptr, extension, context_type, extension, context_type); |
143 script_context->set_module_system( | 145 script_context->set_module_system( |
144 base::MakeUnique<ModuleSystem>(script_context.get(), source_map())); | 146 base::MakeUnique<ModuleSystem>(script_context.get(), source_map())); |
145 ScriptContext* raw_script_context = script_context.get(); | 147 ScriptContext* raw_script_context = script_context.get(); |
(...skipping 414 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
560 // Add a new event listener. We should be notified of the change. | 562 // Add a new event listener. We should be notified of the change. |
561 const char kEventName[] = "idle.onStateChanged"; | 563 const char kEventName[] = "idle.onStateChanged"; |
562 v8::Local<v8::Function> listener = | 564 v8::Local<v8::Function> listener = |
563 FunctionFromString(context, "(function() {})"); | 565 FunctionFromString(context, "(function() {})"); |
564 const char kAddListener[] = | 566 const char kAddListener[] = |
565 "(function(listener) {\n" | 567 "(function(listener) {\n" |
566 " chrome.idle.onStateChanged.addListener(listener);\n" | 568 " chrome.idle.onStateChanged.addListener(listener);\n" |
567 "});"; | 569 "});"; |
568 v8::Local<v8::Function> add_listener = | 570 v8::Local<v8::Function> add_listener = |
569 FunctionFromString(context, kAddListener); | 571 FunctionFromString(context, kAddListener); |
570 EXPECT_CALL( | 572 EXPECT_CALL(*event_change_handler(), |
571 *event_change_handler(), | 573 OnChange(binding::EventListenersChanged::HAS_LISTENERS, |
572 OnChange(binding::EventListenersChanged::HAS_LISTENERS, | 574 script_context, kEventName, nullptr)) |
573 script_context, | 575 .Times(1); |
574 kEventName)).Times(1); | |
575 v8::Local<v8::Value> argv[] = {listener}; | 576 v8::Local<v8::Value> argv[] = {listener}; |
576 RunFunction(add_listener, context, arraysize(argv), argv); | 577 RunFunction(add_listener, context, arraysize(argv), argv); |
577 ::testing::Mock::VerifyAndClearExpectations(event_change_handler()); | 578 ::testing::Mock::VerifyAndClearExpectations(event_change_handler()); |
578 | 579 |
579 // Remove the event listener. We should be notified again. | 580 // Remove the event listener. We should be notified again. |
580 const char kRemoveListener[] = | 581 const char kRemoveListener[] = |
581 "(function(listener) {\n" | 582 "(function(listener) {\n" |
582 " chrome.idle.onStateChanged.removeListener(listener);\n" | 583 " chrome.idle.onStateChanged.removeListener(listener);\n" |
583 "});"; | 584 "});"; |
584 EXPECT_CALL( | 585 EXPECT_CALL(*event_change_handler(), |
585 *event_change_handler(), | 586 OnChange(binding::EventListenersChanged::NO_LISTENERS, |
586 OnChange(binding::EventListenersChanged::NO_LISTENERS, | 587 script_context, kEventName, nullptr)) |
587 script_context, | 588 .Times(1); |
588 kEventName)).Times(1); | |
589 v8::Local<v8::Function> remove_listener = | 589 v8::Local<v8::Function> remove_listener = |
590 FunctionFromString(context, kRemoveListener); | 590 FunctionFromString(context, kRemoveListener); |
591 RunFunction(remove_listener, context, arraysize(argv), argv); | 591 RunFunction(remove_listener, context, arraysize(argv), argv); |
592 ::testing::Mock::VerifyAndClearExpectations(event_change_handler()); | 592 ::testing::Mock::VerifyAndClearExpectations(event_change_handler()); |
593 } | 593 } |
594 | 594 |
595 TEST_F(NativeExtensionBindingsSystemUnittest, | 595 TEST_F(NativeExtensionBindingsSystemUnittest, |
596 TestPrefixedApiEventsAndAppBinding) { | 596 TestPrefixedApiEventsAndAppBinding) { |
597 InitEventChangeHandler(); | 597 InitEventChangeHandler(); |
598 scoped_refptr<Extension> app = CreateExtension("foo", ItemType::PLATFORM_APP, | 598 scoped_refptr<Extension> app = CreateExtension("foo", ItemType::PLATFORM_APP, |
(...skipping 21 matching lines...) Expand all Loading... |
620 gin::V8ToString(app_binding_keys)); | 620 gin::V8ToString(app_binding_keys)); |
621 | 621 |
622 const char kUseAppRuntime[] = | 622 const char kUseAppRuntime[] = |
623 "(function() {\n" | 623 "(function() {\n" |
624 " chrome.app.runtime.onLaunched.addListener(function() {});\n" | 624 " chrome.app.runtime.onLaunched.addListener(function() {});\n" |
625 "});"; | 625 "});"; |
626 v8::Local<v8::Function> use_app_runtime = | 626 v8::Local<v8::Function> use_app_runtime = |
627 FunctionFromString(context, kUseAppRuntime); | 627 FunctionFromString(context, kUseAppRuntime); |
628 EXPECT_CALL(*event_change_handler(), | 628 EXPECT_CALL(*event_change_handler(), |
629 OnChange(binding::EventListenersChanged::HAS_LISTENERS, | 629 OnChange(binding::EventListenersChanged::HAS_LISTENERS, |
630 script_context, "app.runtime.onLaunched")) | 630 script_context, "app.runtime.onLaunched", nullptr)) |
631 .Times(1); | 631 .Times(1); |
632 RunFunctionOnGlobal(use_app_runtime, context, 0, nullptr); | 632 RunFunctionOnGlobal(use_app_runtime, context, 0, nullptr); |
633 ::testing::Mock::VerifyAndClearExpectations(event_change_handler()); | 633 ::testing::Mock::VerifyAndClearExpectations(event_change_handler()); |
634 } | 634 } |
635 | 635 |
636 TEST_F(NativeExtensionBindingsSystemUnittest, | 636 TEST_F(NativeExtensionBindingsSystemUnittest, |
637 TestPrefixedApiMethodsAndSystemBinding) { | 637 TestPrefixedApiMethodsAndSystemBinding) { |
638 scoped_refptr<Extension> extension = | 638 scoped_refptr<Extension> extension = |
639 CreateExtension("foo", ItemType::EXTENSION, {"system.cpu"}); | 639 CreateExtension("foo", ItemType::EXTENSION, {"system.cpu"}); |
640 RegisterExtension(extension->id()); | 640 RegisterExtension(extension->id()); |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
781 EXPECT_FALSE(value_b.IsEmpty()) << property; | 781 EXPECT_FALSE(value_b.IsEmpty()) << property; |
782 EXPECT_NE(value_a, value_b) << property; | 782 EXPECT_NE(value_a, value_b) << property; |
783 }; | 783 }; |
784 | 784 |
785 check_properties_inequal(context_a, context_b, "chrome"); | 785 check_properties_inequal(context_a, context_b, "chrome"); |
786 check_properties_inequal(context_a, context_b, "chrome.idle"); | 786 check_properties_inequal(context_a, context_b, "chrome.idle"); |
787 check_properties_inequal(context_a, context_b, "chrome.idle.onStateChanged"); | 787 check_properties_inequal(context_a, context_b, "chrome.idle.onStateChanged"); |
788 } | 788 } |
789 | 789 |
790 } // namespace extensions | 790 } // namespace extensions |
OLD | NEW |