Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(56)

Unified Diff: chrome/browser/views/sync/sync_setup_flow.h

Issue 160598: Add files to browser/sync. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/views/options/user_data_page_view.cc ('k') | chrome/browser/views/sync/sync_setup_flow.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/views/sync/sync_setup_flow.h
===================================================================
--- chrome/browser/views/sync/sync_setup_flow.h (revision 0)
+++ chrome/browser/views/sync/sync_setup_flow.h (revision 0)
@@ -0,0 +1,176 @@
+// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifdef CHROME_PERSONALIZATION
+
+#ifndef CHROME_BROWSER_VIEWS_SYNC_SYNC_SETUP_FLOW_H_
+#define CHROME_BROWSER_VIEWS_SYNC_SYNC_SETUP_FLOW_H_
+
+#include <string>
+#include <vector>
+
+#include "chrome/browser/dom_ui/html_dialog_ui.h"
+#include "chrome/browser/sync/personalization_strings.h"
+#include "chrome/browser/views/sync/sync_setup_wizard.h"
+
+class FlowHandler;
+class SyncSetupFlowContainer;
+
+// The state machine used by SyncSetupWizard, exposed in its own header
+// to facilitate testing of SyncSetupWizard. This class is used to open and
+// run the html dialog and deletes itself when the dialog closes.
+class SyncSetupFlow : public HtmlDialogUIDelegate {
+ public:
+ virtual ~SyncSetupFlow();
+
+ // Runs a flow from |start| to |end|, and does the work of actually showing
+ // the HTML dialog. |container| is kept up-to-date with the lifetime of the
+ // flow (e.g it is emptied on dialog close).
+ static SyncSetupFlow* Run(ProfileSyncService* service,
+ SyncSetupFlowContainer* container,
+ SyncSetupWizard::State start,
+ SyncSetupWizard::State end);
+
+ // Fills |args| with "user" and "error" arguments by querying |service|.
+ static void GetArgsForGaiaLogin(
+ const ProfileSyncService* service,
+ DictionaryValue* args);
+
+ // Triggers a state machine transition to advance_state.
+ void Advance(SyncSetupWizard::State advance_state);
+
+ // HtmlDialogUIDelegate implementation.
+ // Get the HTML file path for the content to load in the dialog.
+ virtual GURL GetDialogContentURL() const {
+ return GURL("cloudy://resources/setup");
+ }
+
+ // HtmlDialogUIDelegate implementation.
+ virtual void GetDOMMessageHandlers(
+ std::vector<DOMMessageHandler*>* handlers) const;
+
+ // HtmlDialogUIDelegate implementation.
+ // Get the size of the dialog.
+ virtual void GetDialogSize(gfx::Size* size) const;
+
+ // HtmlDialogUIDelegate implementation.
+ // Gets the JSON string input to use when opening the dialog.
+ virtual std::string GetDialogArgs() const {
+ return dialog_start_args_;
+ }
+
+ // HtmlDialogUIDelegate implementation.
+ // A callback to notify the delegate that the dialog closed.
+ virtual void OnDialogClosed(const std::string& json_retval);
+
+ // HtmlDialogUIDelegate implementation.
+ virtual std::wstring GetDialogTitle() const {
+ return kLoginDialogTitle;
+ }
+
+ // HtmlDialogUIDelegate implementation.
+ virtual bool IsDialogModal() const {
+ return false;
+ }
+
+ void OnUserSubmittedAuth(const std::string& username,
+ const std::string& password) {
+ service_->OnUserSubmittedAuth(username, password);
+ }
+
+ void OnUserAcceptedMergeAndSync() {
+ service_->OnUserAcceptedMergeAndSync();
+ }
+
+ private:
+ FRIEND_TEST(SyncSetupWizardTest, InitialStepLogin);
+ FRIEND_TEST(SyncSetupWizardTest, InitialStepMergeAndSync);
+ FRIEND_TEST(SyncSetupWizardTest, DialogCancelled);
+ FRIEND_TEST(SyncSetupWizardTest, InvalidTransitions);
+ FRIEND_TEST(SyncSetupWizardTest, FullSuccessfulRunSetsPref);
+ FRIEND_TEST(SyncSetupWizardTest, DiscreteRun);
+
+ // Use static Run method to get an instance.
+ SyncSetupFlow(SyncSetupWizard::State start_state,
+ SyncSetupWizard::State end_state,
+ const std::string& args, SyncSetupFlowContainer* container,
+ FlowHandler* handler, ProfileSyncService* service)
+ : container_(container), dialog_start_args_(args),
+ current_state_(start_state), end_state_(end_state),
+ flow_handler_(handler), service_(service) {
+ }
+
+ // Returns true if |this| should transition its state machine to |state|
+ // based on |current_state_|, or false if that would be nonsense or is
+ // a no-op.
+ bool ShouldAdvance(SyncSetupWizard::State state);
+
+ SyncSetupFlowContainer* container_; // Our container. Don't own this.
+ std::string dialog_start_args_; // The args to pass to the initial page.
+
+ SyncSetupWizard::State current_state_;
+ SyncSetupWizard::State end_state_; // The goal.
+
+ // The handler needed for the entire flow. We don't own this.
+ FlowHandler* flow_handler_;
+
+ // We need this to write the sentinel "setup completed" pref.
+ ProfileSyncService* service_;
+
+ DISALLOW_COPY_AND_ASSIGN(SyncSetupFlow);
+};
+
+// A really simple wrapper for a SyncSetupFlow so that we don't have to
+// add any public methods to the public SyncSetupWizard interface to notify it
+// when the dialog closes.
+class SyncSetupFlowContainer {
+ public:
+ SyncSetupFlowContainer() : flow_(NULL) { }
+ void set_flow(SyncSetupFlow* flow) {
+ DCHECK(!flow_ || !flow);
+ flow_ = flow;
+ }
+
+ SyncSetupFlow* get_flow() { return flow_; }
+ private:
+ SyncSetupFlow* flow_;
+
+ DISALLOW_COPY_AND_ASSIGN(SyncSetupFlowContainer);
+};
+
+// The FlowHandler connects the state machine to the dialog backing HTML and
+// JS namespace by implementing DOMMessageHandler and being invoked by the
+// SyncSetupFlow. Exposed here to facilitate testing.
+class FlowHandler : public DOMMessageHandler {
+ public:
+ FlowHandler() {}
+ virtual ~FlowHandler() {}
+
+ // DOMMessageHandler implementation.
+ virtual void RegisterMessages();
+
+ // Callbacks from the page.
+ void HandleSubmitAuth(const Value* value);
+ void HandleSubmitMergeAndSync(const Value* value);
+
+ // These functions control which part of the HTML is visible.
+ void ShowGaiaLogin(const DictionaryValue& args);
+ void ShowGaiaSuccessAndClose();
+ void ShowGaiaSuccessAndSettingUp();
+ void ShowMergeAndSync();
+ void ShowMergeAndSyncDone();
+
+ void set_flow(SyncSetupFlow* flow) {
+ flow_ = flow;
+ }
+
+ private:
+ void ExecuteJavascriptInIFrame(const std::wstring& iframe_xpath,
+ const std::wstring& js);
+ SyncSetupFlow* flow_;
+ DISALLOW_COPY_AND_ASSIGN(FlowHandler);
+};
+
+#endif // CHROME_BROWSER_VIEWS_SYNC_SYNC_SETUP_FLOW_H_
+#endif // CHROME_PERSONALIZATION
Property changes on: chrome\browser\views\sync\sync_setup_flow.h
___________________________________________________________________
Added: svn:eol-style
+ LF
« no previous file with comments | « chrome/browser/views/options/user_data_page_view.cc ('k') | chrome/browser/views/sync/sync_setup_flow.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698