Index: chrome/browser/chromeos/login/kiosk_browsertest.cc |
diff --git a/chrome/browser/chromeos/login/kiosk_browsertest.cc b/chrome/browser/chromeos/login/kiosk_browsertest.cc |
index e67f2389cba034a6be887a644acb28c1ac0a5fbf..b19036fe4bcde13433a221c488e93018b1551263 100644 |
--- a/chrome/browser/chromeos/login/kiosk_browsertest.cc |
+++ b/chrome/browser/chromeos/login/kiosk_browsertest.cc |
@@ -13,6 +13,7 @@ |
#include "base/prefs/pref_service.h" |
#include "base/strings/string_number_conversions.h" |
#include "base/strings/string_util.h" |
+#include "base/synchronization/lock.h" |
#include "chrome/browser/browser_process.h" |
#include "chrome/browser/chrome_notification_types.h" |
#include "chrome/browser/chromeos/app_mode/fake_cws.h" |
@@ -139,6 +140,12 @@ void OnNetworkWaitTimedOut(const base::Closure& runner_quit_task) { |
runner_quit_task.Run(); |
} |
+// Helper function for LockFileThread. |
+void LockAndUnlock(scoped_ptr<base::Lock> lock) { |
bartfab (slow)
2014/08/20 14:45:29
Nit: #include "base/memory/scoped_ptr.h"
Joao da Silva
2014/08/21 08:00:00
Done.
|
+ lock->Acquire(); |
+ lock->Release(); |
+} |
+ |
// Helper functions for CanConfigureNetwork mock. |
class ScopedCanConfigureNetwork { |
public: |
@@ -505,6 +512,22 @@ class KioskTest : public OobeBaseTest { |
->GetAppLaunchController(); |
} |
+ // Returns a lock that is holding a task in the FILE thread. Any tasks posted |
bartfab (slow)
2014/08/20 14:45:29
Nit: s/ in / on /
Joao da Silva
2014/08/21 08:00:00
Done.
|
+ // to the FILE thread after this call will be blocked until the returned |
+ // lock is released. |
+ // This can be used to prevent app installation from completing until some |
+ // other conditions are checked and triggered. For example, this can be used |
+ // to trigger the network screen during app launch without racing with the |
+ // app launching process itself. |
+ scoped_ptr<base::AutoLock> LockFileThread() { |
+ scoped_ptr<base::Lock> lock(new base::Lock); |
+ scoped_ptr<base::AutoLock> auto_lock(new base::AutoLock(*lock)); |
+ content::BrowserThread::PostTask( |
bartfab (slow)
2014/08/20 14:45:29
Nit: #include "content/public/browser/browser_thre
Joao da Silva
2014/08/21 08:00:00
Done.
|
+ content::BrowserThread::FILE, FROM_HERE, |
bartfab (slow)
2014/08/20 14:45:29
Nit: #include "base/location.h"
Joao da Silva
2014/08/21 08:00:00
Done.
|
+ base::Bind(&LockAndUnlock, base::Passed(&lock))); |
bartfab (slow)
2014/08/20 14:45:29
Nit 1: #include "base/bind.h"
Nit 1: #include "bas
Joao da Silva
2014/08/21 08:00:00
Done.
|
+ return auto_lock.Pass(); |
+ } |
+ |
MockUserManager* mock_user_manager() { return mock_user_manager_.get(); } |
void set_test_app_id(const std::string& test_app_id) { |
@@ -559,11 +582,12 @@ IN_PROC_BROWSER_TEST_F(KioskTest, LaunchAppNetworkDown) { |
RunAppLaunchNetworkDownTest(); |
} |
-// TODO(zelidrag): Figure out why this test is flaky on bbots. |
-IN_PROC_BROWSER_TEST_F(KioskTest, |
- DISABLED_LaunchAppWithNetworkConfigAccelerator) { |
+IN_PROC_BROWSER_TEST_F(KioskTest, LaunchAppWithNetworkConfigAccelerator) { |
ScopedCanConfigureNetwork can_configure_network(true, false); |
+ // Block app loading until the network screen is shown. |
+ scoped_ptr<base::AutoLock> lock = LockFileThread(); |
+ |
// Start app launch and wait for network connectivity timeout. |
StartAppLaunchFromLoginScreen(SimulateNetworkOnlineClosure()); |
OobeScreenWaiter splash_waiter(OobeDisplay::SCREEN_APP_LAUNCH_SPLASH); |
@@ -589,6 +613,9 @@ IN_PROC_BROWSER_TEST_F(KioskTest, |
"$('continue-network-config-btn').dispatchEvent(e);" |
"})();")); |
+ // Let app launching resume. |
+ lock.reset(); |
+ |
WaitForAppLaunchSuccess(); |
} |