| 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
|
|
|
|
|