Home | History | Annotate | Download | only in renderer
      1 // Copyright 2013 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 #ifndef COMPONENTS_AUTOFILL_CONTENT_RENDERER_PASSWORD_GENERATION_MANAGER_H_
      6 #define COMPONENTS_AUTOFILL_CONTENT_RENDERER_PASSWORD_GENERATION_MANAGER_H_
      7 
      8 #include <map>
      9 #include <utility>
     10 #include <vector>
     11 
     12 #include "content/public/renderer/render_view_observer.h"
     13 #include "third_party/WebKit/public/web/WebInputElement.h"
     14 #include "third_party/WebKit/public/web/WebPasswordGeneratorClient.h"
     15 #include "url/gurl.h"
     16 
     17 namespace WebKit {
     18 class WebCString;
     19 class WebDocument;
     20 }
     21 
     22 namespace content {
     23 struct PasswordForm;
     24 }
     25 
     26 namespace autofill {
     27 
     28 // This class is responsible for controlling communication for password
     29 // generation between the browser (which shows the popup and generates
     30 // passwords) and WebKit (shows the generation icon in the password field).
     31 class PasswordGenerationManager : public content::RenderViewObserver,
     32                                   public WebKit::WebPasswordGeneratorClient {
     33  public:
     34   explicit PasswordGenerationManager(content::RenderView* render_view);
     35   virtual ~PasswordGenerationManager();
     36 
     37  protected:
     38   // Returns true if this document is one that we should consider analyzing.
     39   // Virtual so that it can be overriden during testing.
     40   virtual bool ShouldAnalyzeDocument(const WebKit::WebDocument& document) const;
     41 
     42   // RenderViewObserver:
     43   virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
     44 
     45  private:
     46   // RenderViewObserver:
     47   virtual void DidFinishDocumentLoad(WebKit::WebFrame* frame) OVERRIDE;
     48   virtual void DidFinishLoad(WebKit::WebFrame* frame) OVERRIDE;
     49 
     50   // WebPasswordGeneratorClient:
     51   virtual void openPasswordGenerator(WebKit::WebInputElement& element) OVERRIDE;
     52 
     53   // Message handlers.
     54   void OnFormNotBlacklisted(const content::PasswordForm& form);
     55   void OnPasswordAccepted(const base::string16& password);
     56   void OnPasswordGenerationEnabled(bool enabled);
     57 
     58   // Helper function to decide whether we should show password generation icon.
     59   void MaybeShowIcon();
     60 
     61   content::RenderView* render_view_;
     62 
     63   // True if password generation is enabled for the profile associated
     64   // with this renderer.
     65   bool enabled_;
     66 
     67   // Stores the origin of the account creation form we detected.
     68   GURL account_creation_form_origin_;
     69 
     70   // Stores the origins of the password forms confirmed not to be blacklisted
     71   // by the browser. A form can be blacklisted if a user chooses "never save
     72   // passwords for this site".
     73   std::vector<GURL> not_blacklisted_password_form_origins_;
     74 
     75   std::vector<WebKit::WebInputElement> passwords_;
     76 
     77   DISALLOW_COPY_AND_ASSIGN(PasswordGenerationManager);
     78 };
     79 
     80 }  // namespace autofill
     81 
     82 #endif  // COMPONENTS_AUTOFILL_CONTENT_RENDERER_PASSWORD_GENERATION_MANAGER_H_
     83