Index: chrome/browser/extensions/api/system_info_storage/system_info_storage_apitest.cc |
diff --git a/chrome/browser/extensions/api/system_info_storage/system_info_storage_apitest.cc b/chrome/browser/extensions/api/system_info_storage/system_info_storage_apitest.cc |
index bab128a7b365484df00680c156f8888c0b800132..3f7e77a81f26c481684716133f481a80fa30720d 100644 |
--- a/chrome/browser/extensions/api/system_info_storage/system_info_storage_apitest.cc |
+++ b/chrome/browser/extensions/api/system_info_storage/system_info_storage_apitest.cc |
@@ -3,18 +3,29 @@ |
// found in the LICENSE file. |
#include "base/command_line.h" |
#include "base/message_loop.h" |
+#include "base/timer.h" |
#include "chrome/browser/extensions/api/system_info_storage/storage_info_provider.h" |
#include "chrome/browser/extensions/extension_apitest.h" |
+#include "chrome/browser/extensions/extension_test_message_listener.h" |
+#include "chrome/browser/extensions/system_info_event_router.h" |
#include "chrome/common/chrome_switches.h" |
+#include "chrome/test/base/ui_test_utils.h" |
namespace extensions { |
using api::experimental_system_info_storage::StorageUnitInfo; |
+const int kDefaultIntervalMs = 200; |
+const int kAvailableCapacityBytes = 10000; |
+const int kChangeDelta = 10; |
+ |
class MockStorageInfoProvider : public StorageInfoProvider { |
public: |
- MockStorageInfoProvider() {} |
- virtual ~MockStorageInfoProvider() {} |
+ MockStorageInfoProvider() : is_watching_(false) { |
+ } |
+ virtual ~MockStorageInfoProvider() { |
+ StopWatching(); |
+ } |
virtual bool QueryInfo(StorageInfo* info) OVERRIDE { |
info->clear(); |
@@ -33,6 +44,38 @@ class MockStorageInfoProvider : public StorageInfoProvider { |
StorageUnitInfo* info) OVERRIDE { |
return false; |
} |
+ |
+ bool StartWatching() { |
+ if (is_watching_) return false; |
+ |
+ // Start the timer to emulate storage.onChanged event. |
+ timer_.Start(FROM_HERE, |
+ base::TimeDelta::FromMilliseconds(kDefaultIntervalMs), |
+ this, &MockStorageInfoProvider::OnTimeoutEvent); |
+ |
+ is_watching_ = true; |
+ return true; |
+ } |
+ |
+ bool StopWatching() { |
+ if (!is_watching_) return false; |
+ is_watching_ = false; |
+ timer_.Stop(); |
+ return true; |
+ } |
+ |
+ private: |
+ void OnTimeoutEvent() { |
+ static int count; |
+ SystemInfoEventRouter::GetInstance()-> |
+ OnStorageAvailableCapacityChanged("/dev/sda1", |
+ kAvailableCapacityBytes - count * kChangeDelta); |
+ count++; |
+ } |
+ |
+ // Use a repeating timer to emulate storage free space change event. |
+ base::RepeatingTimer<MockStorageInfoProvider> timer_; |
+ bool is_watching_; |
}; |
class SystemInfoStorageApiTest: public ExtensionApiTest { |
@@ -55,9 +98,20 @@ class SystemInfoStorageApiTest: public ExtensionApiTest { |
}; |
IN_PROC_BROWSER_TEST_F(SystemInfoStorageApiTest, Storage) { |
- StorageInfoProvider* provider = new MockStorageInfoProvider(); |
+ ResultCatcher catcher; |
+ MockStorageInfoProvider* provider = new MockStorageInfoProvider(); |
StorageInfoProvider::InitializeForTesting(provider); |
- ASSERT_TRUE(RunExtensionTest("systeminfo/storage")) << message_; |
+ |
+ ExtensionTestMessageListener listener("ready", true); |
+ const extensions::Extension* extension = |
+ LoadExtension(test_data_dir_.AppendASCII("systeminfo/storage")); |
+ GURL page_url = extension->GetResourceURL("test_storage_api.html"); |
+ ui_test_utils::NavigateToURL(browser(), page_url); |
+ EXPECT_TRUE(listener.WaitUntilSatisfied()); |
+ |
+ provider->StartWatching(); |
+ listener.Reply("go"); |
+ EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
} |
} // namespace extensions |