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 9d467065b64c6b7c75ad9e932199b5b5a417ae2d..18868f7cf778d182dadee6220e3f06ff71a2d046 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,8 +3,11 @@ |
// 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" |
namespace extensions { |
@@ -12,10 +15,17 @@ namespace extensions { |
using api::experimental_system_info_storage::StorageInfo; |
using api::experimental_system_info_storage::StorageUnitInfo; |
+const int kDefaultInterval = 200; // default interval is 200ms. |
Mihai Parparita -not on Chrome
2012/08/31 01:01:00
Instead of needing a comment, can you make the con
Hongbo Min
2012/08/31 15:29:53
Done.
|
+const int kAvailableCapacityBase = 10000; |
Mihai Parparita -not on Chrome
2012/08/31 01:01:00
Ditto here (add a "Bytes" suffix to the name) and
Hongbo Min
2012/08/31 15:29:53
Done.
|
+const int kChangeStep = 10; |
+ |
class MockStorageInfoProvider : public StorageInfoProvider { |
public: |
- MockStorageInfoProvider() {} |
- virtual ~MockStorageInfoProvider() {} |
+ MockStorageInfoProvider() : timer_(NULL), is_watching_(false) { |
+ } |
+ virtual ~MockStorageInfoProvider() { |
+ StopWatching(); |
+ } |
virtual bool QueryInfo(StorageInfo* info) OVERRIDE { |
info->units.clear(); |
@@ -30,10 +40,45 @@ class MockStorageInfoProvider : public StorageInfoProvider { |
return true; |
} |
- virtual bool QueryUnitInfo(const std::string& id, |
+ virtual bool QueryUnitInfo(const FilePath::StringType& path, |
StorageUnitInfo* info) OVERRIDE { |
return false; |
} |
+ |
+ bool StartWatching() { |
+ if (is_watching_) return false; |
+ |
+ timer_ = new base::RepeatingTimer<MockStorageInfoProvider>(); |
+ // Start the timer to emulate storage.onChanged event. |
+ timer_->Start(FROM_HERE, |
+ base::TimeDelta::FromMilliseconds(kDefaultInterval), |
+ this, &MockStorageInfoProvider::OnTimeoutEvent); |
+ |
+ is_watching_ = true; |
+ return true; |
+ } |
+ |
+ bool StopWatching() { |
+ if (!is_watching_) return false; |
+ is_watching_ = false; |
+ timer_->Stop(); |
+ delete timer_; |
Mihai Parparita -not on Chrome
2012/08/31 01:01:00
Since you only call StopWatching from the destruct
Hongbo Min
2012/08/31 15:29:53
Done.
|
+ timer_ = NULL; |
+ return true; |
+ } |
+ |
+ private: |
+ void OnTimeoutEvent() { |
+ static int count; |
+ SystemInfoEventRouter::GetInstance()-> |
+ OnStorageAvailableCapacityChanged("/dev/sda1", |
+ kAvailableCapacityBase - count * kChangeStep); |
+ count++; |
+ } |
+ |
+ // Use a repeating timer to emulate storage free space change event. |
+ base::RepeatingTimer<MockStorageInfoProvider>* timer_; |
+ bool is_watching_; |
Mihai Parparita -not on Chrome
2012/08/31 01:01:00
Nit: extra space after bool.
Hongbo Min
2012/08/31 15:29:53
Done.
|
}; |
class SystemInfoStorageApiTest: public ExtensionApiTest { |
@@ -56,9 +101,14 @@ class SystemInfoStorageApiTest: public ExtensionApiTest { |
}; |
IN_PROC_BROWSER_TEST_F(SystemInfoStorageApiTest, Storage) { |
- StorageInfoProvider* provider = new MockStorageInfoProvider(); |
+ MockStorageInfoProvider* provider = new MockStorageInfoProvider(); |
StorageInfoProvider::InitializeForTesting(provider); |
- ASSERT_TRUE(RunExtensionTest("systeminfo/storage")) << message_; |
+ |
+ ExtensionTestMessageListener listener("ready", true); |
+ ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII("systeminfo/storage"))); |
+ EXPECT_TRUE(listener.WaitUntilSatisfied()); |
+ provider->StartWatching(); |
+ listener.Reply("go"); |
} |
} // namespace extensions |