1 // Copyright 2013 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 #ifndef CHROME_BROWSER_CHROMEOS_FIRST_RUN_DRIVE_FIRST_RUN_CONTROLLER_H_
5 #define CHROME_BROWSER_CHROMEOS_FIRST_RUN_DRIVE_FIRST_RUN_CONTROLLER_H_
7 #include "base/basictypes.h"
8 #include "base/observer_list.h"
9 #include "base/timer/timer.h"
10 #include "chrome/browser/profiles/profile.h"
14 class DriveWebContentsManager
;
16 // This class is responsible for kicking off the Google Drive offline
17 // initialization process. There is an initial delay to avoid contention when
18 // the session starts. DriveFirstRunController will manage its own lifetime and
19 // destroy itself when the initialization succeeds or fails.
20 class DriveFirstRunController
{
22 // This enum is used for UMA metrics. Keep the fields in the same order as
23 // the "CrosEnableDriveOfflineOutcome" enum in histograms.xml.
25 OUTCOME_OFFLINE_ENABLED
,
26 OUTCOME_WEB_CONTENTS_TIMED_OUT
,
27 OUTCOME_WEB_CONTENTS_LOAD_FAILED
,
28 OUTCOME_WRONG_USER_TYPE
,
29 OUTCOME_APP_NOT_INSTALLED
,
30 OUTCOME_BACKGROUND_PAGE_EXISTS
,
36 // Called when enabling offline mode times out. OnCompletion will be called
37 // immediately afterwards.
38 virtual void OnTimedOut() = 0;
40 // Called when the first run flow finishes, informing the observer of
41 // success or failure.
42 virtual void OnCompletion(bool success
) = 0;
45 virtual ~Observer() {}
48 explicit DriveFirstRunController(Profile
* profile
);
49 ~DriveFirstRunController();
51 // Starts the process to enable offline mode for the user's Drive account.
52 void EnableOfflineMode();
54 // Manages observers of the first run flow.
55 void AddObserver(Observer
* observer
);
56 void RemoveObserver(Observer
* observer
);
58 // Set delay times for testing purposes.
59 void SetDelaysForTest(int initial_delay_secs
, int timeout_secs
);
61 // Set the app id and endpoint url for testing purposes.
62 void SetAppInfoForTest(const std::string
& app_id
,
63 const std::string
& endpoint_url
);
66 // Used as a callback to indicate whether the offline initialization
68 void OnOfflineInit(bool success
, UMAOutcome outcome
);
70 // Called when timed out waiting for offline initialization to complete.
71 void OnWebContentsTimedOut();
73 // Creates and shows a system notification when enable offline succeeds.
74 void ShowNotification();
76 // Cleans up internal state and schedules self for deletion.
80 scoped_ptr
<DriveWebContentsManager
> web_contents_manager_
;
81 base::OneShotTimer
<DriveFirstRunController
> web_contents_timer_
;
82 base::OneShotTimer
<DriveFirstRunController
> initial_delay_timer_
;
84 ObserverList
<Observer
> observer_list_
;
86 int initial_delay_secs_
;
87 int web_contents_timeout_secs_
;
88 std::string drive_offline_endpoint_url_
;
89 std::string drive_hosted_app_id_
;
91 DISALLOW_COPY_AND_ASSIGN(DriveFirstRunController
);
94 } // namespace chromeos
96 #endif // CHROME_BROWSER_CHROMEOS_FIRST_RUN_DRIVE_FIRST_RUN_CONTROLLER_H_