Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(50)

Unified Diff: ios/chrome/browser/passwords/credential_manager.h

Issue 1456983002: Move JS-related password manager code upstream (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ios/chrome/browser/passwords/credential_manager.h
diff --git a/ios/chrome/browser/passwords/credential_manager.h b/ios/chrome/browser/passwords/credential_manager.h
new file mode 100644
index 0000000000000000000000000000000000000000..44de4f4fc8ee678fe2baef20a7ba1fa39cb79525
--- /dev/null
+++ b/ios/chrome/browser/passwords/credential_manager.h
@@ -0,0 +1,138 @@
+// Copyright 2015 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.
+
+#ifndef IOS_CHROME_BROWSER_PASSWORDS_CREDENTIAL_MANAGER_H_
+#define IOS_CHROME_BROWSER_PASSWORDS_CREDENTIAL_MANAGER_H_
+
+#include <string>
+#include <vector>
+
+#include "base/mac/scoped_nsobject.h"
Eugene But (OOO till 7-30) 2015/11/18 17:06:48 s/include/import because scoped_nsobject.h is an O
vabr (Chromium) 2015/11/19 10:02:27 Done.
+#include "base/macros.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/memory/weak_ptr.h"
+#include "base/prefs/pref_member.h"
+#include "components/password_manager/core/browser/credential_manager_password_form_manager.h"
+#include "components/password_manager/core/browser/credential_manager_pending_request_task.h"
+#include "components/password_manager/core/browser/credential_manager_pending_require_user_mediation_task.h"
+#include "components/password_manager/core/browser/password_manager_client.h"
+#include "components/password_manager/core/browser/password_store.h"
+#include "ios/web/public/web_state/web_state_observer.h"
+
+@class JSCredentialManager;
+
+namespace ios {
droger 2015/11/18 16:24:16 We don't use the ios:: namespace in //ios. We als
vabr (Chromium) 2015/11/18 16:52:28 Done.
+namespace passwords {
+
+// Implements the app-side of the CredentialManagement JavaScript API.
+// Injects and listens to the injected JavaScript, owns and drives the user
+// interface, and integrates with the password manager. This is the iOS
+// equivalent of the upstream class CredentialManagerDispatcher. Note: Only
+// activates on iOS 8 and later.
+class CredentialManager
+ : public password_manager::CredentialManagerPasswordFormManagerDelegate,
+ public password_manager::CredentialManagerPendingRequestTaskDelegate,
+ public password_manager::
+ CredentialManagerPendingRequireUserMediationTaskDelegate,
+ public web::WebStateObserver {
+ public:
+ CredentialManager(web::WebState* web_state,
+ password_manager::PasswordManagerClient* client,
+ password_manager::PasswordManagerDriver* driver,
+ JSCredentialManager* js_manager);
+ ~CredentialManager() override;
+
+ // web::WebStateObserver:
+ void PageLoaded(
+ web::PageLoadCompletionStatus load_completion_status) override;
+ void CredentialsRequested(int request_id,
+ const GURL& source_url,
+ bool zero_click_only,
+ const std::vector<std::string>& federations,
+ bool is_user_initiated) override;
+ void SignedIn(int request_id,
+ const GURL& source_url,
+ const web::Credential& credential) override;
+ void SignedOut(int request_id, const GURL& source_url) override;
+ void WebStateDestroyed() override;
+
+ // password_manager::CredentialManagerPendingRequestTaskDelegate:
+ bool IsZeroClickAllowed() const override;
+ GURL GetOrigin() const override;
+ void SendCredential(
+ int id,
+ const password_manager::CredentialInfo& credential) override;
+ password_manager::PasswordManagerClient* client() const override;
+ autofill::PasswordForm GetSynthesizedFormForOrigin() const override;
+
+ // password_manager::CredentialManagerPendingRequireUserMediationTaskDelegate:
+ password_manager::PasswordStore* GetPasswordStore() override;
+ void DoneRequiringUserMediation() override;
+
+ // CredentialManagerPasswordFormManagerDelegate:
+ void OnProvisionalSaveComplete() override;
+
+ private:
+ // The errors that can cause a request to fail.
+ enum ErrorType {
+ // An existing request is outstanding.
+ ERROR_TYPE_PENDING_REQUEST = 0,
+
+ // The password store isn't available.
+ ERROR_TYPE_PASSWORD_STORE_UNAVAILABLE,
+
+ // The page origin is untrusted.
+ ERROR_TYPE_SECURITY_ERROR_UNTRUSTED_ORIGIN,
+ };
+
+ explicit CredentialManager(const CredentialManager&) = delete;
+ CredentialManager& operator=(const CredentialManager&) = delete;
droger 2015/11/18 16:24:16 Could this be replaced by the DISALLOW_COPY_AND_AS
vabr (Chromium) 2015/11/18 16:52:28 Done.
+
+ // Sends a message via |js_manager_| to resolve the JavaScript Promise
+ // associated with |request_id|. Invoked after a page-initiated credential
+ // event is acknowledged by the PasswordStore.
+ void ResolvePromise(int request_id);
+
+ // Sends a message via |js_manager_| to reject the JavaScript Promise
+ // associated with |request_id_| with the given |error_type|. Invoked after a
+ // page-initiated credential event, store, or retrieval fails.
+ void RejectPromise(int request_id, ErrorType error_type);
+
+ // Determines the currently loaded page's URL from the active WebState, but
+ // only if it is absolutely trusted. Does not hit the network, but still might
+ // be costly depending on the webview. Returns true if successful.
+ bool GetURLWithAbsoluteTrust(GURL* page_url);
Eugene But (OOO till 7-30) 2015/11/18 17:06:48 According to C++ Style guide this should be GetUrl
vabr (Chromium) 2015/11/19 10:02:27 Done.
+
+ // The request to retrieve credentials from the PasswordStore.
+ scoped_ptr<password_manager::CredentialManagerPendingRequestTask>
+ pending_request_;
+
+ // The task to notify the password manager that the user was signed out.
+ scoped_ptr<password_manager::CredentialManagerPendingRequireUserMediationTask>
+ pending_require_user_mediation_;
+
+ // Saves credentials to the PasswordStore.
+ scoped_ptr<password_manager::CredentialManagerPasswordFormManager>
+ form_manager_;
+
+ // Injected JavaScript to provide the API to web pages.
+ base::scoped_nsobject<JSCredentialManager> js_manager_;
+
+ // Client to access Chrome-specific password manager functionality. Weak.
+ password_manager::PasswordManagerClient* client_;
+
+ // Driver to access embedder-specific password manager functionality. Weak.
+ password_manager::PasswordManagerDriver* driver_;
+
+ // Whether zero-click sign-in is enabled.
+ BooleanPrefMember zero_click_sign_in_enabled_;
+
+ // Weak pointer factory for asynchronously resolving requests.
+ base::WeakPtrFactory<CredentialManager> weak_factory_;
+};
+
+} // namespace passwords
+} // namespace ios
+
+#endif // IOS_CHROME_BROWSER_PASSWORDS_CREDENTIAL_MANAGER_H_

Powered by Google App Engine
This is Rietveld 408576698