Index: chrome/browser/extensions/api/power/power_api_unittest.cc |
diff --git a/chrome/browser/extensions/api/power/power_api_unittest.cc b/chrome/browser/extensions/api/power/power_api_unittest.cc |
deleted file mode 100644 |
index 895b01aed758564bf387541b3f6efd2100aecc76..0000000000000000000000000000000000000000 |
--- a/chrome/browser/extensions/api/power/power_api_unittest.cc |
+++ /dev/null |
@@ -1,291 +0,0 @@ |
-// Copyright (c) 2013 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 "chrome/browser/extensions/api/power/power_api.h" |
- |
-#include <deque> |
-#include <string> |
- |
-#include "base/basictypes.h" |
-#include "base/memory/ref_counted.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "base/memory/weak_ptr.h" |
-#include "chrome/browser/chrome_notification_types.h" |
-#include "chrome/browser/extensions/api/power/power_api_manager.h" |
-#include "chrome/browser/extensions/extension_function_test_utils.h" |
-#include "chrome/test/base/browser_with_test_window_test.h" |
-#include "content/public/browser/notification_details.h" |
-#include "content/public/browser/notification_source.h" |
-#include "content/public/browser/power_save_blocker.h" |
-#include "extensions/common/extension.h" |
- |
-namespace utils = extension_function_test_utils; |
- |
-namespace extensions { |
- |
-namespace { |
- |
-// Args commonly passed to PowerSaveBlockerStubManager::CallFunction(). |
-const char kDisplayArgs[] = "[\"display\"]"; |
-const char kSystemArgs[] = "[\"system\"]"; |
-const char kEmptyArgs[] = "[]"; |
- |
-// Different actions that can be performed as a result of a |
-// PowerSaveBlocker being created or destroyed. |
-enum Request { |
- BLOCK_APP_SUSPENSION, |
- UNBLOCK_APP_SUSPENSION, |
- BLOCK_DISPLAY_SLEEP, |
- UNBLOCK_DISPLAY_SLEEP, |
- // Returned by PowerSaveBlockerStubManager::PopFirstRequest() when no |
- // requests are present. |
- NONE, |
-}; |
- |
-// Stub implementation of content::PowerSaveBlocker that just runs a |
-// callback on destruction. |
-class PowerSaveBlockerStub : public content::PowerSaveBlocker { |
- public: |
- explicit PowerSaveBlockerStub(base::Closure unblock_callback) |
- : unblock_callback_(unblock_callback) { |
- } |
- |
- virtual ~PowerSaveBlockerStub() { |
- unblock_callback_.Run(); |
- } |
- |
- private: |
- base::Closure unblock_callback_; |
- |
- DISALLOW_COPY_AND_ASSIGN(PowerSaveBlockerStub); |
-}; |
- |
-// Manages PowerSaveBlockerStub objects. Tests can instantiate this class |
-// to make PowerApiManager's calls to create PowerSaveBlockers record the |
-// actions that would've been performed instead of actually blocking and |
-// unblocking power management. |
-class PowerSaveBlockerStubManager { |
- public: |
- explicit PowerSaveBlockerStubManager(content::BrowserContext* context) |
- : browser_context_(context), |
- weak_ptr_factory_(this) { |
- // Use base::Unretained since callbacks with return values can't use |
- // weak pointers. |
- PowerApiManager::Get(browser_context_)->SetCreateBlockerFunctionForTesting( |
- base::Bind(&PowerSaveBlockerStubManager::CreateStub, |
- base::Unretained(this))); |
- } |
- |
- ~PowerSaveBlockerStubManager() { |
- PowerApiManager::Get(browser_context_)->SetCreateBlockerFunctionForTesting( |
- PowerApiManager::CreateBlockerFunction()); |
- } |
- |
- // Removes and returns the first item from |requests_|. Returns NONE if |
- // |requests_| is empty. |
- Request PopFirstRequest() { |
- if (requests_.empty()) |
- return NONE; |
- |
- Request request = requests_.front(); |
- requests_.pop_front(); |
- return request; |
- } |
- |
- private: |
- // Creates a new PowerSaveBlockerStub of type |type|. |
- scoped_ptr<content::PowerSaveBlocker> CreateStub( |
- content::PowerSaveBlocker::PowerSaveBlockerType type, |
- const std::string& reason) { |
- Request unblock_request = NONE; |
- switch (type) { |
- case content::PowerSaveBlocker::kPowerSaveBlockPreventAppSuspension: |
- requests_.push_back(BLOCK_APP_SUSPENSION); |
- unblock_request = UNBLOCK_APP_SUSPENSION; |
- break; |
- case content::PowerSaveBlocker::kPowerSaveBlockPreventDisplaySleep: |
- requests_.push_back(BLOCK_DISPLAY_SLEEP); |
- unblock_request = UNBLOCK_DISPLAY_SLEEP; |
- break; |
- } |
- return scoped_ptr<content::PowerSaveBlocker>( |
- new PowerSaveBlockerStub( |
- base::Bind(&PowerSaveBlockerStubManager::AppendRequest, |
- weak_ptr_factory_.GetWeakPtr(), |
- unblock_request))); |
- } |
- |
- void AppendRequest(Request request) { |
- requests_.push_back(request); |
- } |
- |
- content::BrowserContext* browser_context_; |
- |
- // Requests in chronological order. |
- std::deque<Request> requests_; |
- |
- base::WeakPtrFactory<PowerSaveBlockerStubManager> weak_ptr_factory_; |
- |
- DISALLOW_COPY_AND_ASSIGN(PowerSaveBlockerStubManager); |
-}; |
- |
-} // namespace |
- |
-class PowerApiTest : public BrowserWithTestWindowTest { |
- public: |
- virtual void SetUp() OVERRIDE { |
- BrowserWithTestWindowTest::SetUp(); |
- manager_.reset(new PowerSaveBlockerStubManager(profile())); |
- extension_ = utils::CreateEmptyExtensionWithLocation( |
- extensions::Manifest::UNPACKED); |
- } |
- |
- virtual void TearDown() OVERRIDE { |
- extension_ = NULL; |
- manager_.reset(); |
- BrowserWithTestWindowTest::TearDown(); |
- } |
- |
- protected: |
- // Shorthand for PowerRequestKeepAwakeFunction and |
- // PowerReleaseKeepAwakeFunction. |
- enum FunctionType { |
- REQUEST, |
- RELEASE, |
- }; |
- |
- // Calls the function described by |type| with |args|, a JSON list of |
- // arguments, on behalf of |extension|. |
- bool CallFunction(FunctionType type, |
- const std::string& args, |
- extensions::Extension* extension) { |
- scoped_refptr<UIThreadExtensionFunction> function( |
- type == REQUEST ? |
- static_cast<UIThreadExtensionFunction*>( |
- new PowerRequestKeepAwakeFunction) : |
- static_cast<UIThreadExtensionFunction*>( |
- new PowerReleaseKeepAwakeFunction)); |
- function->set_extension(extension); |
- return utils::RunFunction(function.get(), args, browser(), utils::NONE); |
- } |
- |
- // Send a notification to PowerApiManager saying that |extension| has |
- // been unloaded. |
- void UnloadExtension(extensions::Extension* extension) { |
- PowerApiManager::Get(profile())->OnExtensionUnloaded( |
- profile(), extension, UnloadedExtensionInfo::REASON_UNINSTALL); |
- } |
- |
- scoped_ptr<PowerSaveBlockerStubManager> manager_; |
- scoped_refptr<extensions::Extension> extension_; |
-}; |
- |
-TEST_F(PowerApiTest, RequestAndRelease) { |
- // Simulate an extension making and releasing a "display" request and a |
- // "system" request. |
- ASSERT_TRUE(CallFunction(REQUEST, kDisplayArgs, extension_.get())); |
- EXPECT_EQ(BLOCK_DISPLAY_SLEEP, manager_->PopFirstRequest()); |
- EXPECT_EQ(NONE, manager_->PopFirstRequest()); |
- ASSERT_TRUE(CallFunction(RELEASE, kEmptyArgs, extension_.get())); |
- EXPECT_EQ(UNBLOCK_DISPLAY_SLEEP, manager_->PopFirstRequest()); |
- EXPECT_EQ(NONE, manager_->PopFirstRequest()); |
- |
- ASSERT_TRUE(CallFunction(REQUEST, kSystemArgs, extension_.get())); |
- EXPECT_EQ(BLOCK_APP_SUSPENSION, manager_->PopFirstRequest()); |
- EXPECT_EQ(NONE, manager_->PopFirstRequest()); |
- ASSERT_TRUE(CallFunction(RELEASE, kEmptyArgs, extension_.get())); |
- EXPECT_EQ(UNBLOCK_APP_SUSPENSION, manager_->PopFirstRequest()); |
- EXPECT_EQ(NONE, manager_->PopFirstRequest()); |
-} |
- |
-TEST_F(PowerApiTest, RequestWithoutRelease) { |
- // Simulate an extension calling requestKeepAwake() without calling |
- // releaseKeepAwake(). The override should be automatically removed when |
- // the extension is unloaded. |
- ASSERT_TRUE(CallFunction(REQUEST, kDisplayArgs, extension_.get())); |
- EXPECT_EQ(BLOCK_DISPLAY_SLEEP, manager_->PopFirstRequest()); |
- EXPECT_EQ(NONE, manager_->PopFirstRequest()); |
- |
- UnloadExtension(extension_.get()); |
- EXPECT_EQ(UNBLOCK_DISPLAY_SLEEP, manager_->PopFirstRequest()); |
- EXPECT_EQ(NONE, manager_->PopFirstRequest()); |
-} |
- |
-TEST_F(PowerApiTest, ReleaseWithoutRequest) { |
- // Simulate an extension calling releaseKeepAwake() without having |
- // calling requestKeepAwake() earlier. The call should be ignored. |
- ASSERT_TRUE(CallFunction(RELEASE, kEmptyArgs, extension_.get())); |
- EXPECT_EQ(NONE, manager_->PopFirstRequest()); |
-} |
- |
-TEST_F(PowerApiTest, UpgradeRequest) { |
- // Simulate an extension calling requestKeepAwake("system") and then |
- // requestKeepAwake("display"). When the second call is made, a |
- // display-sleep-blocking request should be made before the initial |
- // app-suspension-blocking request is released. |
- ASSERT_TRUE(CallFunction(REQUEST, kSystemArgs, extension_.get())); |
- EXPECT_EQ(BLOCK_APP_SUSPENSION, manager_->PopFirstRequest()); |
- EXPECT_EQ(NONE, manager_->PopFirstRequest()); |
- |
- ASSERT_TRUE(CallFunction(REQUEST, kDisplayArgs, extension_.get())); |
- EXPECT_EQ(BLOCK_DISPLAY_SLEEP, manager_->PopFirstRequest()); |
- EXPECT_EQ(UNBLOCK_APP_SUSPENSION, manager_->PopFirstRequest()); |
- EXPECT_EQ(NONE, manager_->PopFirstRequest()); |
- |
- ASSERT_TRUE(CallFunction(RELEASE, kEmptyArgs, extension_.get())); |
- EXPECT_EQ(UNBLOCK_DISPLAY_SLEEP, manager_->PopFirstRequest()); |
- EXPECT_EQ(NONE, manager_->PopFirstRequest()); |
-} |
- |
-TEST_F(PowerApiTest, DowngradeRequest) { |
- // Simulate an extension calling requestKeepAwake("display") and then |
- // requestKeepAwake("system"). When the second call is made, an |
- // app-suspension-blocking request should be made before the initial |
- // display-sleep-blocking request is released. |
- ASSERT_TRUE(CallFunction(REQUEST, kDisplayArgs, extension_.get())); |
- EXPECT_EQ(BLOCK_DISPLAY_SLEEP, manager_->PopFirstRequest()); |
- EXPECT_EQ(NONE, manager_->PopFirstRequest()); |
- |
- ASSERT_TRUE(CallFunction(REQUEST, kSystemArgs, extension_.get())); |
- EXPECT_EQ(BLOCK_APP_SUSPENSION, manager_->PopFirstRequest()); |
- EXPECT_EQ(UNBLOCK_DISPLAY_SLEEP, manager_->PopFirstRequest()); |
- EXPECT_EQ(NONE, manager_->PopFirstRequest()); |
- |
- ASSERT_TRUE(CallFunction(RELEASE, kEmptyArgs, extension_.get())); |
- EXPECT_EQ(UNBLOCK_APP_SUSPENSION, manager_->PopFirstRequest()); |
- EXPECT_EQ(NONE, manager_->PopFirstRequest()); |
-} |
- |
-TEST_F(PowerApiTest, MultipleExtensions) { |
- // Simulate an extension blocking the display from sleeping. |
- ASSERT_TRUE(CallFunction(REQUEST, kDisplayArgs, extension_.get())); |
- EXPECT_EQ(BLOCK_DISPLAY_SLEEP, manager_->PopFirstRequest()); |
- EXPECT_EQ(NONE, manager_->PopFirstRequest()); |
- |
- // Create a second extension that blocks system suspend. No additional |
- // PowerSaveBlocker is needed; the blocker from the first extension |
- // already covers the behavior requested by the second extension. |
- scoped_ptr<base::DictionaryValue> extension_value( |
- utils::ParseDictionary("{\"name\": \"Test\", \"version\": \"1.0\"}")); |
- scoped_refptr<extensions::Extension> extension2( |
- utils::CreateExtension(extensions::Manifest::UNPACKED, |
- extension_value.get(), "second_extension")); |
- ASSERT_TRUE(CallFunction(REQUEST, kSystemArgs, extension2.get())); |
- EXPECT_EQ(NONE, manager_->PopFirstRequest()); |
- |
- // When the first extension is unloaded, a new app-suspension blocker |
- // should be created before the display-sleep blocker is destroyed. |
- UnloadExtension(extension_.get()); |
- EXPECT_EQ(BLOCK_APP_SUSPENSION, manager_->PopFirstRequest()); |
- EXPECT_EQ(UNBLOCK_DISPLAY_SLEEP, manager_->PopFirstRequest()); |
- EXPECT_EQ(NONE, manager_->PopFirstRequest()); |
- |
- // Make the first extension block display-sleep again. |
- ASSERT_TRUE(CallFunction(REQUEST, kDisplayArgs, extension_.get())); |
- EXPECT_EQ(BLOCK_DISPLAY_SLEEP, manager_->PopFirstRequest()); |
- EXPECT_EQ(UNBLOCK_APP_SUSPENSION, manager_->PopFirstRequest()); |
- EXPECT_EQ(NONE, manager_->PopFirstRequest()); |
-} |
- |
-} // namespace extensions |