1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_CHROMEOS_DRIVE_TEST_UTIL_H_ 6 #define CHROME_BROWSER_CHROMEOS_DRIVE_TEST_UTIL_H_ 7 8 #include <string> 9 10 #include "google_apis/drive/test_util.h" 11 #include "net/base/completion_callback.h" 12 #include "net/base/io_buffer.h" 13 #include "net/base/network_change_notifier.h" 14 #include "net/base/test_completion_callback.h" 15 #include "third_party/cros_system_api/constants/cryptohome.h" 16 17 class PrefRegistrySimple; 18 19 namespace net { 20 class IOBuffer; 21 } // namespace net 22 23 namespace drive { 24 25 namespace test_util { 26 27 // Disk space size used by FakeFreeDiskSpaceGetter. 28 const int64 kLotsOfSpace = cryptohome::kMinFreeSpaceInBytes * 10; 29 30 // Runs a task posted to the blocking pool, including subsequent tasks posted 31 // to the UI message loop and the blocking pool. 32 // 33 // A task is often posted to the blocking pool with PostTaskAndReply(). In 34 // that case, a task is posted back to the UI message loop, which can again 35 // post a task to the blocking pool. This function processes these tasks 36 // repeatedly. 37 void RunBlockingPoolTask(); 38 39 // Helper to destroy objects which needs Destroy() to be called on destruction. 40 // Note: When using this helper, you should destruct objects before 41 // BrowserThread. 42 struct DestroyHelperForTests { 43 template<typename T> 44 void operator()(T* object) const { 45 if (object) { 46 object->Destroy(); 47 test_util::RunBlockingPoolTask(); // Finish destruction. 48 } 49 } 50 }; 51 52 // Reads all the data from |reader| and copies to |content|. Returns net::Error 53 // code. 54 template<typename Reader> 55 int ReadAllData(Reader* reader, std::string* content) { 56 const int kBufferSize = 10; 57 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kBufferSize)); 58 while (true) { 59 net::TestCompletionCallback callback; 60 int result = reader->Read(buffer.get(), kBufferSize, callback.callback()); 61 result = callback.GetResult(result); 62 if (result <= 0) { 63 // Found an error or EOF. Return it. Note: net::OK is 0. 64 return result; 65 } 66 content->append(buffer->data(), result); 67 } 68 } 69 70 // Registers Drive related preferences in |pref_registry|. Drive related 71 // preferences should be registered as TestingPrefServiceSimple will crash if 72 // unregistered preference is referenced. 73 void RegisterDrivePrefs(PrefRegistrySimple* pref_registry); 74 75 // Fake NetworkChangeNotifier implementation. 76 class FakeNetworkChangeNotifier : public net::NetworkChangeNotifier { 77 public: 78 FakeNetworkChangeNotifier(); 79 80 void SetConnectionType(ConnectionType type); 81 82 // NetworkChangeNotifier override. 83 virtual ConnectionType GetCurrentConnectionType() const OVERRIDE; 84 85 private: 86 net::NetworkChangeNotifier::ConnectionType type_; 87 }; 88 89 } // namespace test_util 90 } // namespace drive 91 92 #endif // CHROME_BROWSER_CHROMEOS_DRIVE_TEST_UTIL_H_ 93