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

Unified Diff: public/platform/WebCrypto.h

Issue 19885002: WebCrypto: Add interfaces for importKey(). (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Rebase and rename Interface --> Private Created 7 years, 5 months 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
« no previous file with comments | « Tools/DumpRenderTree/chromium/TestRunner/src/WebTestInterfaces.cpp ('k') | public/platform/WebCryptoKey.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: public/platform/WebCrypto.h
diff --git a/public/platform/WebCrypto.h b/public/platform/WebCrypto.h
index 4b091d16929eccbd290a3af61ec04e6ba0eb4b08..f11bcbd940da6cd6377a4a0c8fb9a0f49518814f 100644
--- a/public/platform/WebCrypto.h
+++ b/public/platform/WebCrypto.h
@@ -32,12 +32,14 @@
#define WebCrypto_h
#include "WebCommon.h"
+#include "WebCryptoKey.h"
+#include "WebPrivatePtr.h"
namespace WebKit {
class WebArrayBuffer;
-class WebCryptoAlgorithm;
-class WebCryptoKey;
+class WebCryptoKeyOperation;
+class WebCryptoKeyOperationResult;
class WebCryptoOperation;
class WebCryptoOperationResult;
@@ -49,17 +51,17 @@ public:
// The following methods begin an asynchronous multi-part cryptographic
// operation.
//
- // Let the WebCryptoOperationResult* be called "result".
+ // Let the WebCryptoOperationResult& be called "result".
//
- // Implementations can either:
+ // Before returning, implementations can either:
//
// * Synchronously fail initialization by calling:
- // result->initializationFailed(errorDetails)
+ // result.initializationFailed(errorDetails)
//
// OR
//
// * Create a new WebCryptoOperation* and return it by calling:
- // result->initializationSucceeded(cryptoOperation)
+ // result.initializationSucceeded(cryptoOperation)
//
// If initialization succeeds, then Blink will subsequently call
// methods on cryptoOperation:
@@ -68,10 +70,11 @@ public:
// - cryptoOperation->finish() to indicate there is no more data
// - cryptoOperation->abort() to cancel.
//
- // The embedder may call result->completeWithXXX() at any time while the
- // cryptoOperation is "in progress". Typically completion is set once
- // cryptoOperation->finish() is called, however it can also be called
- // during cryptoOperation->process() (for instance to set an error).
+ // The embedder may call result.completeWithXXX() at any time while the
+ // cryptoOperation is "in progress" (can copy the initial "result" object).
+ // Typically completion is set once cryptoOperation->finish() is called,
+ // however it can also be called during cryptoOperation->process() (for
+ // instance to set an error).
//
// The cryptoOperation pointer MUST remain valid while it is "in progress".
// The cryptoOperation is said to be "in progress" from the time after
@@ -79,12 +82,43 @@ public:
//
// - Blink calls cryptoOperation->abort()
// OR
- // - Embedder calls result->completeWithXXX()
+ // - Embedder calls result.completeWithXXX()
//
- // Once the cryptoOperation is no longer "in progress" the "result" pointer
- // is no longer valid. At this time the embedder is responsible for freeing
- // the cryptoOperation.
- virtual void digest(const WebCryptoAlgorithm&, WebCryptoOperationResult*) { }
+ // Once the cryptoOperation is no longer "in progress" the embedder is
+ // responsible for freeing the cryptoOperation.
+ virtual void digest(const WebCryptoAlgorithm&, WebCryptoOperationResult&) { }
+
+ // The following methods begin an asynchronous single-part key operation.
+ //
+ // Let the WebCryptoKeyOperationResult& be called "result".
+ //
+ // Before returning, implementations can either:
+ //
+ // (a) Synchronously fail initialization by calling:
+ // result.initializationFailed(errorDetails)
+ // (this results in throwing a Javascript exception)
+ //
+ // (b) Synchronously complete the request (success or error) by calling:
+ // result.completeWithXXX()
+ //
+ // (c) Defer completion by calling
+ // result.initializationSucceeded(keyOperation)
+ //
+ // If asynchronous completion (c) was chosen, then the embedder can notify
+ // completion after returning by calling result.completeWithXXX() (can make
+ // a copy of "result").
+ //
+ // The keyOperation pointer MUST remain valid while it is "in progress".
+ // The keyOperation is said to be "in progress" from the time after
+ // result->initializationSucceded() has been called, up until either:
+ //
+ // - Blink calls keyOperation->abort()
+ // OR
+ // - Embedder calls result.completeWithXXX()
+ //
+ // Once the keyOperation is no longer "in progress" the embedder is
+ // responsible for freeing the cryptoOperation.
+ virtual void importKey(WebCryptoKeyFormat, const unsigned char* keyData, size_t keyDataSize, const WebCryptoAlgorithm&, bool extractable, WebCryptoKeyUsageMask, WebCryptoKeyOperationResult&) { }
protected:
virtual ~WebCrypto() { }
@@ -109,19 +143,110 @@ protected:
virtual ~WebCryptoOperation() { }
};
-// FIXME: Add error types.
-class WebCryptoOperationResult {
+// Can be implemented by embedder for unit-testing.
+class WebCryptoOperationResultPrivate {
public:
- // Only one of these should be called.
- virtual void initializationFailed() = 0;
- virtual void initializationSucceded(WebCryptoOperation*) = 0;
+ virtual ~WebCryptoOperationResultPrivate() { }
- // Only one of these should be called to set the result.
+ virtual void initializationFailed() = 0;
+ virtual void initializationSucceeded(WebCryptoOperation*) = 0;
virtual void completeWithError() = 0;
virtual void completeWithArrayBuffer(const WebArrayBuffer&) = 0;
+ virtual void ref() = 0;
+ virtual void deref() = 0;
+};
+
+// FIXME: Add error types.
+class WebCryptoOperationResult {
+public:
+ explicit WebCryptoOperationResult(WebCryptoOperationResultPrivate* impl)
+ {
+ assign(impl);
+ }
+
+ ~WebCryptoOperationResult() { reset(); }
+
+ WebCryptoOperationResult(const WebCryptoOperationResult& o)
+ {
+ assign(o);
+ }
+
+ WebCryptoOperationResult& operator=(const WebCryptoOperationResult& o)
+ {
+ assign(o);
+ return *this;
+ }
+
+ WEBKIT_EXPORT void initializationFailed();
+ WEBKIT_EXPORT void initializationSucceeded(WebCryptoOperation*);
+ WEBKIT_EXPORT void completeWithError();
+ WEBKIT_EXPORT void completeWithArrayBuffer(const WebArrayBuffer&);
+
+private:
+ WEBKIT_EXPORT void reset();
+ WEBKIT_EXPORT void assign(const WebCryptoOperationResult&);
+ WEBKIT_EXPORT void assign(WebCryptoOperationResultPrivate*);
+
+ WebPrivatePtr<WebCryptoOperationResultPrivate> m_impl;
+};
+
+class WebCryptoKeyOperation {
+public:
+ // Cancels the in-progress operation.
+ // * Implementations should delete |this| after aborting.
+ virtual void abort() = 0;
+
protected:
- virtual ~WebCryptoOperationResult() { }
+ virtual ~WebCryptoKeyOperation() { }
+};
+
+// Can be implemented by embedder for unit-testing.
+class WebCryptoKeyOperationResultPrivate {
+public:
+ virtual ~WebCryptoKeyOperationResultPrivate() { }
+
+ virtual void initializationFailed() = 0;
+ virtual void initializationSucceeded(WebCryptoKeyOperation*) = 0;
+ virtual void completeWithError() = 0;
+ virtual void completeWithKey(const WebCryptoKey&) = 0;
+
+ virtual void ref() = 0;
+ virtual void deref() = 0;
+};
+
+class WebCryptoKeyOperationResult {
+public:
+ explicit WebCryptoKeyOperationResult(WebCryptoKeyOperationResultPrivate* impl)
+ {
+ assign(impl);
+ }
+
+ ~WebCryptoKeyOperationResult() { reset(); }
+
+ WebCryptoKeyOperationResult(const WebCryptoKeyOperationResult& o)
+ {
+ assign(o);
+ }
+
+ WebCryptoKeyOperationResult& operator=(const WebCryptoKeyOperationResult& o)
+ {
+ assign(o);
+ return *this;
+ }
+
+ WEBKIT_EXPORT void initializationFailed();
+ WEBKIT_EXPORT void initializationSucceeded(WebCryptoKeyOperation*);
+
+ WEBKIT_EXPORT void completeWithError();
+ WEBKIT_EXPORT void completeWithKey(const WebCryptoKey&);
+
+private:
+ WEBKIT_EXPORT void reset();
+ WEBKIT_EXPORT void assign(const WebCryptoKeyOperationResult&);
+ WEBKIT_EXPORT void assign(WebCryptoKeyOperationResultPrivate*);
+
+ WebPrivatePtr<WebCryptoKeyOperationResultPrivate> m_impl;
};
} // namespace WebKit
« no previous file with comments | « Tools/DumpRenderTree/chromium/TestRunner/src/WebTestInterfaces.cpp ('k') | public/platform/WebCryptoKey.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698