diff options
Diffstat (limited to 'chrome/browser/ui/tab_contents/tab_contents_wrapper.cc')
-rw-r--r-- | chrome/browser/ui/tab_contents/tab_contents_wrapper.cc | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/chrome/browser/ui/tab_contents/tab_contents_wrapper.cc b/chrome/browser/ui/tab_contents/tab_contents_wrapper.cc new file mode 100644 index 0000000..0adec32 --- /dev/null +++ b/chrome/browser/ui/tab_contents/tab_contents_wrapper.cc @@ -0,0 +1,63 @@ +// Copyright (c) 2010 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. + +#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" + +#include "base/singleton.h" +#include "chrome/browser/password_manager/password_manager.h" +#include "chrome/browser/password_manager_delegate_impl.h" +#include "chrome/browser/tab_contents/tab_contents.h" + +//////////////////////////////////////////////////////////////////////////////// +// TabContentsWrapper, public: + +TabContentsWrapper::TabContentsWrapper(TabContents* contents) + : tab_contents_(contents) { + DCHECK(contents); + // Stash this in the property bag so it can be retrieved without having to + // go to a Browser. + property_accessor()->SetProperty(contents->property_bag(), this); + + // Needed so that we initialize the password manager on first navigation. + tab_contents()->AddNavigationObserver(this); +} + +TabContentsWrapper::~TabContentsWrapper() { + // Unregister observers (TabContents outlives supporting objects). + tab_contents()->RemoveNavigationObserver(password_manager_.get()); +} + +PropertyAccessor<TabContentsWrapper*>* TabContentsWrapper::property_accessor() { + return Singleton< PropertyAccessor<TabContentsWrapper*> >::get(); +} + +TabContentsWrapper* TabContentsWrapper::Clone() { + TabContents* new_contents = tab_contents()->Clone(); + TabContentsWrapper* new_wrapper = new TabContentsWrapper(new_contents); + // Instantiate the passowrd manager if it has been instantiated here. + if (password_manager_.get()) + new_wrapper->GetPasswordManager(); + return new_wrapper; +} + +PasswordManager* TabContentsWrapper::GetPasswordManager() { + if (!password_manager_.get()) { + // Create the delegate then create the manager. + password_manager_delegate_.reset( + new PasswordManagerDelegateImpl(tab_contents())); + password_manager_.reset( + new PasswordManager(password_manager_delegate_.get())); + // Register the manager to receive navigation notifications. + tab_contents()->AddNavigationObserver(password_manager_.get()); + } + return password_manager_.get(); +} + +//////////////////////////////////////////////////////////////////////////////// +// TabContentsWrapper, WebNavigationObserver implementation: + +void TabContentsWrapper::NavigateToPendingEntry() { + GetPasswordManager(); + tab_contents()->RemoveNavigationObserver(this); +} |