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

Unified Diff: chrome/browser/ui/webui/sync_internals_message_handler.cc

Issue 248153003: about:sync: Fix refresh crash and broken node browser (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 8 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/ui/webui/sync_internals_message_handler.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/webui/sync_internals_message_handler.cc
diff --git a/chrome/browser/ui/webui/sync_internals_message_handler.cc b/chrome/browser/ui/webui/sync_internals_message_handler.cc
index 3d4ddefc3add8251704a1a28e1fe7d2521188a1c..c4612b755bc5c4b38ddffba126d8bf4cd4c278b0 100644
--- a/chrome/browser/ui/webui/sync_internals_message_handler.cc
+++ b/chrome/browser/ui/webui/sync_internals_message_handler.cc
@@ -22,7 +22,8 @@ using syncer::ModelTypeSet;
using syncer::WeakHandle;
SyncInternalsMessageHandler::SyncInternalsMessageHandler()
- : weak_ptr_factory_(this) {}
+ : is_registered_(false),
+ weak_ptr_factory_(this) {}
SyncInternalsMessageHandler::~SyncInternalsMessageHandler() {
if (js_controller_)
@@ -63,12 +64,16 @@ void SyncInternalsMessageHandler::HandleRegisterForEvents(
const base::ListValue* args) {
DCHECK(args->empty());
+ // is_registered_ flag protects us from double-registering. This could
+ // happen on a page refresh, where the JavaScript gets re-run but the
+ // message handler remains unchanged.
ProfileSyncService* service = GetProfileSyncService();
- if (service) {
+ if (service && !is_registered_) {
service->AddObserver(this);
service->AddProtocolEventObserver(this);
js_controller_ = service->GetJsController();
js_controller_->AddJsEventHandler(this);
+ is_registered_ = true;
}
}
@@ -113,12 +118,9 @@ void SyncInternalsMessageHandler::HandleGetAllNodes(
void SyncInternalsMessageHandler::OnReceivedAllNodes(
int request_id,
scoped_ptr<base::ListValue> nodes) {
- base::ListValue response_args;
- response_args.Append(new base::FundamentalValue(request_id));
- response_args.Append(nodes.release());
-
+ base::FundamentalValue id(request_id);
web_ui()->CallJavascriptFunction("chrome.sync.getAllNodesCallback",
- response_args);
+ id, *nodes);
}
void SyncInternalsMessageHandler::OnStateChanged() {
« no previous file with comments | « chrome/browser/ui/webui/sync_internals_message_handler.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698