summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorakalin@chromium.org <akalin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-11-19 20:58:59 +0000
committerakalin@chromium.org <akalin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-11-19 20:58:59 +0000
commite8559e55970d8233a0a41973a29df4edc3b78f37 (patch)
treef1cd51574806286bb284fbfd0d4aa3fadec705a6
parent3115bf87e34f5c40c93eb9349cda1a040f38573b (diff)
downloadchromium_src-e8559e55970d8233a0a41973a29df4edc3b78f37.zip
chromium_src-e8559e55970d8233a0a41973a29df4edc3b78f37.tar.gz
chromium_src-e8559e55970d8233a0a41973a29df4edc3b78f37.tar.bz2
Made FlowHandler() be created by SyncSetupFlow itself.
Clean up SyncSetupFlow's flow_handler_ if ownership isn't taken away from it. BUG= TEST=SyncSetupWizard unit tests Review URL: http://codereview.chromium.org/405027 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@32540 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/sync/sync_setup_flow.cc27
-rw-r--r--chrome/browser/sync/sync_setup_flow.h13
2 files changed, 27 insertions, 13 deletions
diff --git a/chrome/browser/sync/sync_setup_flow.cc b/chrome/browser/sync/sync_setup_flow.cc
index 51d513a..f5cdb84 100644
--- a/chrome/browser/sync/sync_setup_flow.cc
+++ b/chrome/browser/sync/sync_setup_flow.cc
@@ -146,8 +146,28 @@ void FlowHandler::ExecuteJavascriptInIFrame(const std::wstring& iframe_xpath,
}
}
+// Use static Run method to get an instance.
+SyncSetupFlow::SyncSetupFlow(SyncSetupWizard::State start_state,
+ SyncSetupWizard::State end_state,
+ const std::string& args,
+ SyncSetupFlowContainer* container,
+ ProfileSyncService* service)
+ : container_(container),
+ dialog_start_args_(args),
+ current_state_(start_state),
+ end_state_(end_state),
+ login_start_time_(base::TimeTicks::Now()),
+ flow_handler_(new FlowHandler()),
+ owns_flow_handler_(true),
+ service_(service) {
+ flow_handler_->set_flow(this);
+}
+
SyncSetupFlow::~SyncSetupFlow() {
flow_handler_->set_flow(NULL);
+ if (owns_flow_handler_) {
+ delete flow_handler_;
+ }
}
void SyncSetupFlow::GetDialogSize(gfx::Size* size) const {
@@ -231,6 +251,9 @@ void SyncSetupFlow::GetArgsForGaiaLogin(const ProfileSyncService* service,
void SyncSetupFlow::GetDOMMessageHandlers(
std::vector<DOMMessageHandler*>* handlers) const {
handlers->push_back(flow_handler_);
+ // We don't own flow_handler_ anymore, but it sticks around until at least
+ // right after OnDialogClosed() is called (and this object is destroyed).
+ owns_flow_handler_ = false;
}
bool SyncSetupFlow::ShouldAdvance(SyncSetupWizard::State state) {
@@ -305,10 +328,8 @@ SyncSetupFlow* SyncSetupFlow::Run(ProfileSyncService* service,
if (!b)
return NULL;
- FlowHandler* handler = new FlowHandler();
SyncSetupFlow* flow = new SyncSetupFlow(start, end, json_args,
- container, handler, service);
- handler->set_flow(flow);
+ container, service);
b->BrowserShowHtmlDialog(flow, NULL);
return flow;
}
diff --git a/chrome/browser/sync/sync_setup_flow.h b/chrome/browser/sync/sync_setup_flow.h
index c089155..6dbc04f 100644
--- a/chrome/browser/sync/sync_setup_flow.h
+++ b/chrome/browser/sync/sync_setup_flow.h
@@ -98,15 +98,7 @@ class SyncSetupFlow : public HtmlDialogUIDelegate {
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),
- login_start_time_(base::TimeTicks::Now()),
- flow_handler_(handler),
- service_(service) {
- }
+ ProfileSyncService* 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
@@ -122,8 +114,9 @@ class SyncSetupFlow : public HtmlDialogUIDelegate {
// Time that the GAIA_LOGIN step was received.
base::TimeTicks login_start_time_;
- // The handler needed for the entire flow. We don't own this.
+ // The handler needed for the entire flow.
FlowHandler* flow_handler_;
+ mutable bool owns_flow_handler_;
// We need this to write the sentinel "setup completed" pref.
ProfileSyncService* service_;