Index: content/renderer/pepper/plugin_power_saver_helper_browsertest.cc |
diff --git a/content/renderer/pepper/plugin_power_saver_helper_browsertest.cc b/content/renderer/pepper/plugin_power_saver_helper_browsertest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..11ed09afb347aeb2adcb132a41805630b1d58163 |
--- /dev/null |
+++ b/content/renderer/pepper/plugin_power_saver_helper_browsertest.cc |
@@ -0,0 +1,116 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "base/run_loop.h" |
+#include "content/common/frame_messages.h" |
+#include "content/common/view_message_enums.h" |
+#include "content/public/test/render_view_test.h" |
+#include "content/renderer/pepper/plugin_power_saver_helper.h" |
+#include "content/renderer/render_frame_impl.h" |
+#include "content/renderer/render_view_impl.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+#include "third_party/WebKit/public/web/WebDocument.h" |
+#include "third_party/WebKit/public/web/WebLocalFrame.h" |
+#include "url/gurl.h" |
+ |
+namespace content { |
+ |
+class PluginPowerSaverHelperTest : public RenderViewTest { |
+ public: |
+ PluginPowerSaverHelperTest() : sink_(NULL) {} |
+ |
+ RenderFrameImpl* frame() { |
+ return static_cast<RenderFrameImpl*>(view_->GetMainRenderFrame()); |
+ } |
+ |
+ PluginPowerSaverHelper* power_saver_helper() { |
+ return frame()->plugin_power_saver_helper(); |
+ } |
+ |
+ virtual void SetUp() { |
Lei Zhang
2014/10/30 21:41:58
no virtual, override at the end.
tommycli
2014/10/30 21:46:22
Done.
|
+ RenderViewTest::SetUp(); |
+ sink_ = &render_thread_->sink(); |
+ } |
+ |
+ protected: |
+ IPC::TestSink* sink_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(PluginPowerSaverHelperTest); |
+}; |
+ |
+TEST_F(PluginPowerSaverHelperTest, AllowSameOrigin) { |
+ bool cross_origin = false; |
+ EXPECT_FALSE(power_saver_helper()->ShouldThrottleContent( |
+ GURL(), 100, 100, &cross_origin)); |
+ EXPECT_FALSE(cross_origin); |
+ |
+ EXPECT_FALSE(power_saver_helper()->ShouldThrottleContent( |
+ GURL(), 1000, 1000, &cross_origin)); |
+ EXPECT_FALSE(cross_origin); |
+} |
+ |
+TEST_F(PluginPowerSaverHelperTest, DisallowCrossOriginUnlessLarge) { |
+ bool cross_origin = false; |
+ EXPECT_TRUE(power_saver_helper()->ShouldThrottleContent( |
+ GURL("http://other.com"), 100, 100, &cross_origin)); |
+ EXPECT_TRUE(cross_origin); |
+ |
+ EXPECT_FALSE(power_saver_helper()->ShouldThrottleContent( |
+ GURL("http://other.com"), 1000, 1000, &cross_origin)); |
+ EXPECT_TRUE(cross_origin); |
+} |
+ |
+TEST_F(PluginPowerSaverHelperTest, TemporaryOriginWhitelist) { |
+ bool cross_origin = false; |
+ EXPECT_TRUE(power_saver_helper()->ShouldThrottleContent( |
+ GURL("http://other.com"), 100, 100, &cross_origin)); |
+ EXPECT_TRUE(cross_origin); |
+ |
+ // Clear out other messages so we find just the plugin power saver IPCs. |
+ sink_->ClearMessages(); |
+ |
+ power_saver_helper()->WhitelistContentOrigin(GURL("http://other.com")); |
+ EXPECT_FALSE(power_saver_helper()->ShouldThrottleContent( |
+ GURL("http://other.com"), 100, 100, &cross_origin)); |
+ EXPECT_TRUE(cross_origin); |
+ |
+ // Test that we've sent an IPC to the browser. |
+ EXPECT_EQ(1u, sink_->message_count()); |
Lei Zhang
2014/10/30 21:41:58
ASSERT_EQ
tommycli
2014/10/30 21:46:22
Done.
|
+ const IPC::Message* msg = sink_->GetMessageAt(0); |
+ EXPECT_EQ(FrameHostMsg_PluginContentOriginAllowed::ID, msg->type()); |
+ FrameHostMsg_PluginContentOriginAllowed::Param params; |
+ FrameHostMsg_PluginContentOriginAllowed::Read(msg, ¶ms); |
+ EXPECT_EQ(GURL("http://other.com"), params.a); |
+} |
+ |
+TEST_F(PluginPowerSaverHelperTest, UnthrottleOnExPostFactoWhitelist) { |
+ base::RunLoop loop; |
+ power_saver_helper()->RegisterPeripheralPlugin(GURL("http://other.com"), |
+ loop.QuitClosure()); |
+ |
+ std::set<GURL> origin_whitelist; |
+ origin_whitelist.insert(GURL("http://other.com")); |
+ frame()->OnMessageReceived(FrameMsg_UpdatePluginContentOriginWhitelist( |
+ frame()->GetRoutingID(), origin_whitelist)); |
+ |
+ // Runs until the unthrottle closure is run. |
+ loop.Run(); |
+} |
+ |
+TEST_F(PluginPowerSaverHelperTest, ClearWhitelistOnNavigate) { |
+ power_saver_helper()->WhitelistContentOrigin(GURL("http://other.com")); |
+ |
+ bool cross_origin = false; |
+ EXPECT_FALSE(power_saver_helper()->ShouldThrottleContent( |
+ GURL("http://other.com"), 100, 100, &cross_origin)); |
+ EXPECT_TRUE(cross_origin); |
+ |
+ LoadHTML("<html></html>"); |
+ |
+ EXPECT_TRUE(power_saver_helper()->ShouldThrottleContent( |
+ GURL("http://other.com"), 100, 100, &cross_origin)); |
+ EXPECT_TRUE(cross_origin); |
+} |
+ |
+} // namespace content |