content_password_manager_driver.cc revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "components/password_manager/content/browser/content_password_manager_driver.h" 6 7#include "components/autofill/content/browser/content_autofill_driver.h" 8#include "components/autofill/content/common/autofill_messages.h" 9#include "components/autofill/core/common/form_data.h" 10#include "components/autofill/core/common/password_form.h" 11#include "content/public/browser/browser_context.h" 12#include "content/public/browser/navigation_details.h" 13#include "content/public/browser/navigation_entry.h" 14#include "content/public/browser/render_view_host.h" 15#include "content/public/browser/web_contents.h" 16#include "content/public/common/page_transition_types.h" 17#include "content/public/common/ssl_status.h" 18#include "ipc/ipc_message_macros.h" 19#include "net/cert/cert_status_flags.h" 20 21ContentPasswordManagerDriver::ContentPasswordManagerDriver( 22 content::WebContents* web_contents, 23 PasswordManagerClient* client) 24 : WebContentsObserver(web_contents), 25 password_manager_(client), 26 password_generation_manager_(client) { 27 DCHECK(web_contents); 28} 29 30ContentPasswordManagerDriver::~ContentPasswordManagerDriver() {} 31 32void ContentPasswordManagerDriver::FillPasswordForm( 33 const autofill::PasswordFormFillData& form_data) { 34 DCHECK(web_contents()); 35 web_contents()->GetRenderViewHost()->Send(new AutofillMsg_FillPasswordForm( 36 web_contents()->GetRenderViewHost()->GetRoutingID(), form_data)); 37} 38 39void ContentPasswordManagerDriver::AllowPasswordGenerationForForm( 40 autofill::PasswordForm* form) { 41 content::RenderViewHost* host = web_contents()->GetRenderViewHost(); 42 host->Send(new AutofillMsg_FormNotBlacklisted(host->GetRoutingID(), *form)); 43} 44 45void ContentPasswordManagerDriver::AccountCreationFormsFound( 46 const std::vector<autofill::FormData>& forms) { 47 content::RenderViewHost* host = web_contents()->GetRenderViewHost(); 48 host->Send(new AutofillMsg_AccountCreationFormsDetected(host->GetRoutingID(), 49 forms)); 50} 51 52bool ContentPasswordManagerDriver::DidLastPageLoadEncounterSSLErrors() { 53 DCHECK(web_contents()); 54 content::NavigationEntry* entry = 55 web_contents()->GetController().GetActiveEntry(); 56 if (!entry) { 57 NOTREACHED(); 58 return false; 59 } 60 61 return net::IsCertStatusError(entry->GetSSL().cert_status); 62} 63 64bool ContentPasswordManagerDriver::IsOffTheRecord() { 65 DCHECK(web_contents()); 66 return web_contents()->GetBrowserContext()->IsOffTheRecord(); 67} 68 69PasswordGenerationManager* 70ContentPasswordManagerDriver::GetPasswordGenerationManager() { 71 return &password_generation_manager_; 72} 73 74PasswordManager* ContentPasswordManagerDriver::GetPasswordManager() { 75 return &password_manager_; 76} 77 78void ContentPasswordManagerDriver::DidNavigateMainFrame( 79 const content::LoadCommittedDetails& details, 80 const content::FrameNavigateParams& params) { 81 password_manager_.DidNavigateMainFrame(details.is_in_page); 82} 83 84bool ContentPasswordManagerDriver::OnMessageReceived( 85 const IPC::Message& message) { 86 bool handled = true; 87 IPC_BEGIN_MESSAGE_MAP(PasswordManager, message) 88 IPC_MESSAGE_FORWARD(AutofillHostMsg_PasswordFormsParsed, 89 &password_manager_, 90 PasswordManager::OnPasswordFormsParsed) 91 IPC_MESSAGE_FORWARD(AutofillHostMsg_PasswordFormsRendered, 92 &password_manager_, 93 PasswordManager::OnPasswordFormsRendered) 94 IPC_MESSAGE_FORWARD(AutofillHostMsg_PasswordFormSubmitted, 95 &password_manager_, 96 PasswordManager::OnPasswordFormSubmitted) 97 IPC_MESSAGE_UNHANDLED(handled = false) 98 IPC_END_MESSAGE_MAP() 99 100 return handled; 101} 102 103autofill::AutofillManager* ContentPasswordManagerDriver::GetAutofillManager() { 104 autofill::ContentAutofillDriver* driver = 105 autofill::ContentAutofillDriver::FromWebContents(web_contents()); 106 return driver ? driver->autofill_manager() : NULL; 107} 108