Prevent double inialization of DOMUI pref handlers

BUG=66901
TEST=Open DOMUI prefs, then navigate to a different DOMUI prefs URL in the same tab; it should not crash.

Review URL: http://codereview.chromium.org/6291012

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@72521 0039d316-1c4b-4281-b951-d872f2087c98
parent 1020e149
......@@ -135,7 +135,8 @@ void OptionsPageUIHandler::UserMetricsRecordAction(
//
////////////////////////////////////////////////////////////////////////////////
OptionsUI::OptionsUI(TabContents* contents) : DOMUI(contents) {
OptionsUI::OptionsUI(TabContents* contents)
: DOMUI(contents), initialized_handlers_(false) {
DictionaryValue* localized_strings = new DictionaryValue();
#if defined(OS_CHROMEOS)
......@@ -258,6 +259,14 @@ RefCountedMemory* OptionsUI::GetFaviconResourceBytes() {
void OptionsUI::InitializeHandlers() {
DCHECK(!GetProfile()->IsOffTheRecord());
// The reinitialize call from DidBecomeActiveForReusedRenderView end up being
// delivered after a new web page DOM has been brought up in an existing
// renderer (due to IPC delays), causing this method to be called twice. If
// that happens, ignore the second call.
if (initialized_handlers_)
return;
initialized_handlers_ = true;
std::vector<DOMMessageHandler*>::iterator iter;
// Skip over the generic handler.
for (iter = handlers_.begin() + 1; iter != handlers_.end(); ++iter) {
......
// Copyright (c) 2010 The Chromium Authors. All rights reserved.
// Copyright (c) 2011 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.
......@@ -53,6 +53,7 @@ class OptionsPageUIHandler : public DOMMessageHandler,
virtual void GetLocalizedValues(DictionaryValue* localized_strings) = 0;
// Initialize the page. Called once the DOM is available for manipulation.
// This will be called only once.
virtual void Initialize() {}
// Uninitializes the page. Called just before the object is destructed.
......@@ -91,6 +92,8 @@ class OptionsUI : public DOMUI {
void AddOptionsPageUIHandler(DictionaryValue* localized_strings,
OptionsPageUIHandler* handler);
bool initialized_handlers_;
DISALLOW_COPY_AND_ASSIGN(OptionsUI);
};
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment