| Index: components/autofill/content/browser/content_autofill_driver.cc
 | 
| diff --git a/components/autofill/content/browser/content_autofill_driver.cc b/components/autofill/content/browser/content_autofill_driver.cc
 | 
| index a3bba0f250bb23975b6014820d73b51513c07a75..331f291c2c4fe68053ad318bb9414bc0ebd248b5 100644
 | 
| --- a/components/autofill/content/browser/content_autofill_driver.cc
 | 
| +++ b/components/autofill/content/browser/content_autofill_driver.cc
 | 
| @@ -16,48 +16,20 @@
 | 
|  #include "content/public/browser/browser_thread.h"
 | 
|  #include "content/public/browser/navigation_controller.h"
 | 
|  #include "content/public/browser/navigation_details.h"
 | 
| +#include "content/public/browser/render_frame_host.h"
 | 
|  #include "content/public/browser/render_view_host.h"
 | 
| -#include "content/public/browser/web_contents.h"
 | 
| -#include "content/public/common/frame_navigate_params.h"
 | 
| +#include "content/public/browser/site_instance.h"
 | 
|  #include "ipc/ipc_message_macros.h"
 | 
|  
 | 
|  namespace autofill {
 | 
|  
 | 
| -namespace {
 | 
| -
 | 
| -const char kContentAutofillDriverWebContentsUserDataKey[] =
 | 
| -    "web_contents_autofill_driver_impl";
 | 
| -
 | 
| -}  // namespace
 | 
| -
 | 
| -// static
 | 
| -void ContentAutofillDriver::CreateForWebContentsAndDelegate(
 | 
| -    content::WebContents* contents,
 | 
| -    AutofillClient* client,
 | 
| -    const std::string& app_locale,
 | 
| -    AutofillManager::AutofillDownloadManagerState enable_download_manager) {
 | 
| -  if (FromWebContents(contents))
 | 
| -    return;
 | 
| -
 | 
| -  contents->SetUserData(
 | 
| -      kContentAutofillDriverWebContentsUserDataKey,
 | 
| -      new ContentAutofillDriver(
 | 
| -          contents, client, app_locale, enable_download_manager));
 | 
| -}
 | 
| -
 | 
| -// static
 | 
| -ContentAutofillDriver* ContentAutofillDriver::FromWebContents(
 | 
| -    content::WebContents* contents) {
 | 
| -  return static_cast<ContentAutofillDriver*>(
 | 
| -      contents->GetUserData(kContentAutofillDriverWebContentsUserDataKey));
 | 
| -}
 | 
| -
 | 
|  ContentAutofillDriver::ContentAutofillDriver(
 | 
| -    content::WebContents* web_contents,
 | 
| +    content::RenderFrameHost* render_frame_host,
 | 
|      AutofillClient* client,
 | 
|      const std::string& app_locale,
 | 
|      AutofillManager::AutofillDownloadManagerState enable_download_manager)
 | 
| -    : content::WebContentsObserver(web_contents),
 | 
| +    : render_frame_host_(render_frame_host),
 | 
| +      client_(client),
 | 
|        autofill_manager_(new AutofillManager(this,
 | 
|                                              client,
 | 
|                                              app_locale,
 | 
| @@ -70,11 +42,15 @@ ContentAutofillDriver::ContentAutofillDriver(
 | 
|  ContentAutofillDriver::~ContentAutofillDriver() {}
 | 
|  
 | 
|  bool ContentAutofillDriver::IsOffTheRecord() const {
 | 
| -  return web_contents()->GetBrowserContext()->IsOffTheRecord();
 | 
| +  return render_frame_host_->GetSiteInstance()
 | 
| +      ->GetBrowserContext()
 | 
| +      ->IsOffTheRecord();
 | 
|  }
 | 
|  
 | 
|  net::URLRequestContextGetter* ContentAutofillDriver::GetURLRequestContext() {
 | 
| -  return web_contents()->GetBrowserContext()->GetRequestContext();
 | 
| +  return render_frame_host_->GetSiteInstance()
 | 
| +      ->GetBrowserContext()
 | 
| +      ->GetRequestContext();
 | 
|  }
 | 
|  
 | 
|  base::SequencedWorkerPool* ContentAutofillDriver::GetBlockingPool() {
 | 
| @@ -82,7 +58,7 @@ base::SequencedWorkerPool* ContentAutofillDriver::GetBlockingPool() {
 | 
|  }
 | 
|  
 | 
|  bool ContentAutofillDriver::RendererIsAvailable() {
 | 
| -  return (web_contents()->GetRenderViewHost() != NULL);
 | 
| +  return render_frame_host_->GetRenderViewHost() != NULL;
 | 
|  }
 | 
|  
 | 
|  void ContentAutofillDriver::SendFormDataToRenderer(
 | 
| @@ -91,15 +67,14 @@ void ContentAutofillDriver::SendFormDataToRenderer(
 | 
|      const FormData& data) {
 | 
|    if (!RendererIsAvailable())
 | 
|      return;
 | 
| -  content::RenderViewHost* host = web_contents()->GetRenderViewHost();
 | 
|    switch (action) {
 | 
|      case FORM_DATA_ACTION_FILL:
 | 
| -      host->Send(
 | 
| -          new AutofillMsg_FillForm(host->GetRoutingID(), query_id, data));
 | 
| +      render_frame_host_->Send(new AutofillMsg_FillForm(
 | 
| +          render_frame_host_->GetRoutingID(), query_id, data));
 | 
|        break;
 | 
|      case FORM_DATA_ACTION_PREVIEW:
 | 
| -      host->Send(
 | 
| -          new AutofillMsg_PreviewForm(host->GetRoutingID(), query_id, data));
 | 
| +      render_frame_host_->Send(new AutofillMsg_PreviewForm(
 | 
| +          render_frame_host_->GetRoutingID(), query_id, data));
 | 
|        break;
 | 
|    }
 | 
|  }
 | 
| @@ -107,8 +82,14 @@ void ContentAutofillDriver::SendFormDataToRenderer(
 | 
|  void ContentAutofillDriver::PingRenderer() {
 | 
|    if (!RendererIsAvailable())
 | 
|      return;
 | 
| -  content::RenderViewHost* host = web_contents()->GetRenderViewHost();
 | 
| -  host->Send(new AutofillMsg_Ping(host->GetRoutingID()));
 | 
| +  render_frame_host_->Send(
 | 
| +      new AutofillMsg_Ping(render_frame_host_->GetRoutingID()));
 | 
| +}
 | 
| +
 | 
| +void ContentAutofillDriver::DetectAccountCreationForms(
 | 
| +    const std::vector<FormStructure*>& forms) {
 | 
| +  autofill_manager_->client()->DetectAccountCreationForms(render_frame_host_,
 | 
| +                                                          forms);
 | 
|  }
 | 
|  
 | 
|  void ContentAutofillDriver::SendAutofillTypePredictionsToRenderer(
 | 
| @@ -119,56 +100,57 @@ void ContentAutofillDriver::SendAutofillTypePredictionsToRenderer(
 | 
|  
 | 
|    if (!RendererIsAvailable())
 | 
|      return;
 | 
| -  content::RenderViewHost* host = web_contents()->GetRenderViewHost();
 | 
|  
 | 
|    std::vector<FormDataPredictions> type_predictions;
 | 
|    FormStructure::GetFieldTypePredictions(forms, &type_predictions);
 | 
| -  host->Send(new AutofillMsg_FieldTypePredictionsAvailable(host->GetRoutingID(),
 | 
| -                                                           type_predictions));
 | 
| +  render_frame_host_->Send(new AutofillMsg_FieldTypePredictionsAvailable(
 | 
| +      render_frame_host_->GetRoutingID(), type_predictions));
 | 
|  }
 | 
|  
 | 
|  void ContentAutofillDriver::RendererShouldAcceptDataListSuggestion(
 | 
|      const base::string16& value) {
 | 
|    if (!RendererIsAvailable())
 | 
|      return;
 | 
| -  content::RenderViewHost* host = web_contents()->GetRenderViewHost();
 | 
| -  host->Send(
 | 
| -      new AutofillMsg_AcceptDataListSuggestion(host->GetRoutingID(), value));
 | 
| +  render_frame_host_->Send(new AutofillMsg_AcceptDataListSuggestion(
 | 
| +      render_frame_host_->GetRoutingID(), value));
 | 
|  }
 | 
|  
 | 
|  void ContentAutofillDriver::RendererShouldClearFilledForm() {
 | 
|    if (!RendererIsAvailable())
 | 
|      return;
 | 
| -  content::RenderViewHost* host = web_contents()->GetRenderViewHost();
 | 
| -  host->Send(new AutofillMsg_ClearForm(host->GetRoutingID()));
 | 
| +  render_frame_host_->Send(
 | 
| +      new AutofillMsg_ClearForm(render_frame_host_->GetRoutingID()));
 | 
|  }
 | 
|  
 | 
|  void ContentAutofillDriver::RendererShouldClearPreviewedForm() {
 | 
|    if (!RendererIsAvailable())
 | 
|      return;
 | 
| -  content::RenderViewHost* host = web_contents()->GetRenderViewHost();
 | 
| -  host->Send(new AutofillMsg_ClearPreviewedForm(host->GetRoutingID()));
 | 
| +  render_frame_host_->Send(
 | 
| +      new AutofillMsg_ClearPreviewedForm(render_frame_host_->GetRoutingID()));
 | 
|  }
 | 
|  
 | 
|  void ContentAutofillDriver::RendererShouldFillFieldWithValue(
 | 
|      const base::string16& value) {
 | 
|    if (!RendererIsAvailable())
 | 
|      return;
 | 
| -  content::RenderViewHost* host = web_contents()->GetRenderViewHost();
 | 
| -  host->Send(new AutofillMsg_FillFieldWithValue(host->GetRoutingID(), value));
 | 
| +  render_frame_host_->Send(new AutofillMsg_FillFieldWithValue(
 | 
| +      render_frame_host_->GetRoutingID(), value));
 | 
|  }
 | 
| +
 | 
|  void ContentAutofillDriver::RendererShouldPreviewFieldWithValue(
 | 
|      const base::string16& value) {
 | 
|    if (!RendererIsAvailable())
 | 
|      return;
 | 
| -  content::RenderViewHost* host = web_contents()->GetRenderViewHost();
 | 
| -  host->Send(new AutofillMsg_PreviewFieldWithValue(host->GetRoutingID(),
 | 
| -                                                   value));
 | 
| +  render_frame_host_->Send(new AutofillMsg_PreviewFieldWithValue(
 | 
| +      render_frame_host_->GetRoutingID(), value));
 | 
|  }
 | 
|  
 | 
| -bool ContentAutofillDriver::OnMessageReceived(const IPC::Message& message) {
 | 
| +bool ContentAutofillDriver::HandleMessage(const IPC::Message& message) {
 | 
|    bool handled = true;
 | 
|    IPC_BEGIN_MESSAGE_MAP(ContentAutofillDriver, message)
 | 
| +  IPC_MESSAGE_FORWARD(AutofillHostMsg_FirstUserGestureObserved,
 | 
| +                      client_,
 | 
| +                      AutofillClient::OnFirstUserGestureObserved)
 | 
|    IPC_MESSAGE_FORWARD(AutofillHostMsg_FormsSeen,
 | 
|                        autofill_manager_.get(),
 | 
|                        AutofillManager::OnFormsSeen)
 | 
| @@ -210,7 +192,7 @@ bool ContentAutofillDriver::OnMessageReceived(const IPC::Message& message) {
 | 
|    return handled;
 | 
|  }
 | 
|  
 | 
| -void ContentAutofillDriver::DidNavigateMainFrame(
 | 
| +void ContentAutofillDriver::DidNavigateFrame(
 | 
|      const content::LoadCommittedDetails& details,
 | 
|      const content::FrameNavigateParams& params) {
 | 
|    if (details.is_navigation_to_different_page())
 | 
| @@ -223,13 +205,4 @@ void ContentAutofillDriver::SetAutofillManager(
 | 
|    autofill_manager_->SetExternalDelegate(&autofill_external_delegate_);
 | 
|  }
 | 
|  
 | 
| -void ContentAutofillDriver::NavigationEntryCommitted(
 | 
| -    const content::LoadCommittedDetails& load_details) {
 | 
| -  autofill_manager_->client()->HideAutofillPopup();
 | 
| -}
 | 
| -
 | 
| -void ContentAutofillDriver::WasHidden() {
 | 
| -  autofill_manager_->client()->HideAutofillPopup();
 | 
| -}
 | 
| -
 | 
|  }  // namespace autofill
 | 
| 
 |