| Index: chrome/browser/ui/webui/password_manager_internals/password_manager_internals_ui.cc
|
| diff --git a/chrome/browser/ui/webui/password_manager_internals/password_manager_internals_ui.cc b/chrome/browser/ui/webui/password_manager_internals/password_manager_internals_ui.cc
|
| index 34d46112af75a041f980bb3165e77da57f15c7f6..90963475735491cadc9969b73ffd35eb8898a5c0 100644
|
| --- a/chrome/browser/ui/webui/password_manager_internals/password_manager_internals_ui.cc
|
| +++ b/chrome/browser/ui/webui/password_manager_internals/password_manager_internals_ui.cc
|
| @@ -7,26 +7,18 @@
|
| #include <algorithm>
|
| #include <set>
|
|
|
| -#include "base/strings/string16.h"
|
| -#include "base/strings/stringprintf.h"
|
| -#include "base/strings/utf_string_conversions.h"
|
| #include "base/values.h"
|
| -#include "chrome/browser/password_manager/chrome_password_manager_client.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| -#include "chrome/browser/ui/android/tab_model/tab_model.h"
|
| -#include "chrome/browser/ui/android/tab_model/tab_model_list.h"
|
| -#include "chrome/browser/ui/tab_contents/tab_contents_iterator.h"
|
| #include "chrome/common/url_constants.h"
|
| -#include "content/public/browser/browser_context.h"
|
| -#include "content/public/browser/render_view_host.h"
|
| -#include "content/public/browser/web_contents.h"
|
| +#include "components/password_manager/content/browser/password_manager_internals_service_factory.h"
|
| +#include "components/password_manager/core/browser/password_manager_internals_service.h"
|
| #include "content/public/browser/web_ui.h"
|
| #include "content/public/browser/web_ui_data_source.h"
|
| #include "grit/password_manager_internals_resources.h"
|
| #include "net/base/escape.h"
|
|
|
| -using content::BrowserContext;
|
| -using content::WebContents;
|
| +using password_manager::PasswordManagerInternalsService;
|
| +using password_manager::PasswordManagerInternalsServiceFactory;
|
|
|
| namespace {
|
|
|
| @@ -42,92 +34,46 @@ content::WebUIDataSource* CreatePasswordManagerInternalsHTMLSource() {
|
| return source;
|
| }
|
|
|
| -void InsertWebContentsIfProfileMatches(
|
| - WebContents* web_contents,
|
| - const Profile* profile_to_match,
|
| - std::set<WebContents*>* set_of_web_contents) {
|
| - if (static_cast<const BrowserContext*>(profile_to_match) ==
|
| - web_contents->GetBrowserContext()) {
|
| - set_of_web_contents->insert(web_contents);
|
| - }
|
| -}
|
| -
|
| } // namespace
|
|
|
| PasswordManagerInternalsUI::PasswordManagerInternalsUI(content::WebUI* web_ui)
|
| : WebUIController(web_ui),
|
| WebContentsObserver(web_ui->GetWebContents()),
|
| - did_stop_loading_(false) {
|
| + registered_with_logging_service_(false) {
|
| // Set up the chrome://password-manager-internals/ source.
|
| content::WebUIDataSource::Add(Profile::FromWebUI(web_ui),
|
| CreatePasswordManagerInternalsHTMLSource());
|
| - NotifyAllPasswordManagerClients(PAGE_OPENED);
|
| }
|
|
|
| PasswordManagerInternalsUI::~PasswordManagerInternalsUI() {
|
| - NotifyAllPasswordManagerClients(PAGE_CLOSED);
|
| + if (!registered_with_logging_service_)
|
| + return;
|
| + PasswordManagerInternalsService* service =
|
| + PasswordManagerInternalsServiceFactory::GetForBrowserContext(
|
| + Profile::FromWebUI(web_ui()));
|
| + if (service)
|
| + service->UnregisterReceiver(this);
|
| }
|
|
|
| void PasswordManagerInternalsUI::DidStopLoading(
|
| content::RenderViewHost* /* render_view_host */) {
|
| - did_stop_loading_ = true;
|
| - if (log_buffer_.empty())
|
| - return;
|
| - LogInternal(log_buffer_);
|
| - log_buffer_.clear();
|
| + PasswordManagerInternalsService* service =
|
| + PasswordManagerInternalsServiceFactory::GetForBrowserContext(
|
| + Profile::FromWebUI(web_ui()));
|
| + if (service) {
|
| + registered_with_logging_service_ = true;
|
| + std::string past_logs(service->RegisterReceiver(this));
|
| + LogSavePasswordProgress(past_logs);
|
| + }
|
| }
|
|
|
| void PasswordManagerInternalsUI::LogSavePasswordProgress(
|
| const std::string& text) {
|
| - if (did_stop_loading_)
|
| - LogInternal(text);
|
| - else
|
| - log_buffer_.append(text);
|
| -}
|
| -
|
| -void PasswordManagerInternalsUI::LogInternal(const std::string& text) {
|
| + if (!registered_with_logging_service_)
|
| + return;
|
| std::string no_quotes(text);
|
| std::replace(no_quotes.begin(), no_quotes.end(), '"', ' ');
|
| base::StringValue text_string_value(net::EscapeForHTML(no_quotes));
|
| web_ui()->CallJavascriptFunction("addSavePasswordProgressLog",
|
| text_string_value);
|
| }
|
| -
|
| -void PasswordManagerInternalsUI::NotifyAllPasswordManagerClients(
|
| - ClientNotificationType notification_type) {
|
| - // First, find all the WebContents objects of the current profile.
|
| - Profile* current_profile = Profile::FromWebUI(web_ui());
|
| - std::set<WebContents*> profile_web_contents;
|
| -#if defined(OS_ANDROID)
|
| - for (TabModelList::const_iterator iter = TabModelList::begin();
|
| - iter != TabModelList::end();
|
| - ++iter) {
|
| - TabModel* model = *iter;
|
| - for (int i = 0; i < model->GetTabCount(); ++i) {
|
| - InsertWebContentsIfProfileMatches(
|
| - model->GetWebContentsAt(i), current_profile, &profile_web_contents);
|
| - }
|
| - }
|
| -#else
|
| - for (TabContentsIterator iter; !iter.done(); iter.Next()) {
|
| - InsertWebContentsIfProfileMatches(
|
| - *iter, current_profile, &profile_web_contents);
|
| - }
|
| -#endif
|
| -
|
| - // Now get the corresponding PasswordManagerClients, and attach/detach |this|.
|
| - for (std::set<WebContents*>::iterator it = profile_web_contents.begin();
|
| - it != profile_web_contents.end();
|
| - ++it) {
|
| - ChromePasswordManagerClient* client =
|
| - ChromePasswordManagerClient::FromWebContents(*it);
|
| - switch (notification_type) {
|
| - case PAGE_OPENED:
|
| - client->SetLogger(this);
|
| - break;
|
| - case PAGE_CLOSED:
|
| - client->SetLogger(NULL);
|
| - break;
|
| - }
|
| - }
|
| -}
|
|
|