| Index: public/platform/WebCrypto.h | 
| diff --git a/public/platform/WebCrypto.h b/public/platform/WebCrypto.h | 
| index edf5ab52b88aaf35814603b9658172885a52da9c..427dedb6535cf37b81d347ab0d4b5697488bde0e 100644 | 
| --- a/public/platform/WebCrypto.h | 
| +++ b/public/platform/WebCrypto.h | 
| @@ -35,6 +35,7 @@ | 
| #include "WebCryptoAlgorithm.h" | 
| #include "WebCryptoKey.h" | 
| #include "WebPrivatePtr.h" | 
| +#include "WebString.h" | 
| #include "WebVector.h" | 
|  | 
| namespace WebCore { class CryptoResult; } | 
| @@ -48,6 +49,20 @@ namespace blink { | 
| class WebArrayBuffer; | 
| class WebString; | 
|  | 
| +// FIXME: Remove once Blink has rolled into Chromium. | 
| +#define WEBCRYPTO_HAS_ERROR_TYPE 1 | 
| + | 
| +enum WebCryptoErrorType { | 
| +    WebCryptoErrorTypeType, | 
| +    WebCryptoErrorTypeNotSupported, | 
| +    WebCryptoErrorTypeSyntax, | 
| +    WebCryptoErrorTypeInvalidState, | 
| +    WebCryptoErrorTypeInvalidAccess, | 
| +    WebCryptoErrorTypeUnknown, | 
| +    WebCryptoErrorTypeData, | 
| +    WebCryptoErrorTypeOperation, | 
| +}; | 
| + | 
| class WebCryptoResult { | 
| public: | 
| WebCryptoResult(const WebCryptoResult& o) | 
| @@ -66,15 +81,13 @@ public: | 
| return *this; | 
| } | 
|  | 
| -    BLINK_PLATFORM_EXPORT void completeWithError(); | 
| - | 
| // Note that WebString is NOT safe to pass across threads. | 
| // | 
| -    // Error details are intended to be displayed to developers for debugging. | 
| -    // They MUST NEVER reveal any secret information such as bytes of the key | 
| -    // or plain text. An appropriate error would be something like: | 
| +    // Error details are surfaced in an exception, and MUST NEVER reveal any | 
| +    // secret information such as bytes of the key or plain text. An | 
| +    // appropriate error would be something like: | 
| //   "iv must be 16 bytes long". | 
| -    BLINK_PLATFORM_EXPORT void completeWithError(const WebString&); | 
| +    BLINK_PLATFORM_EXPORT void completeWithError(WebCryptoErrorType, const WebString&); | 
|  | 
| // Note that WebArrayBuffer is NOT safe to create from another thread. | 
| BLINK_PLATFORM_EXPORT void completeWithBuffer(const WebArrayBuffer&); | 
| @@ -188,16 +201,16 @@ public: | 
| //  * The key usages permit the operation being requested. | 
| //  * The key's algorithm matches that of the requested operation. | 
| // | 
| -    virtual void encrypt(const WebCryptoAlgorithm&, const WebCryptoKey&, const unsigned char* data, unsigned dataSize, WebCryptoResult result) { result.completeWithError(); } | 
| -    virtual void decrypt(const WebCryptoAlgorithm&, const WebCryptoKey&, const unsigned char* data, unsigned dataSize, WebCryptoResult result) { result.completeWithError(); } | 
| -    virtual void sign(const WebCryptoAlgorithm&, const WebCryptoKey&, const unsigned char* data, unsigned dataSize, WebCryptoResult result) { result.completeWithError(); } | 
| -    virtual void verifySignature(const WebCryptoAlgorithm&, const WebCryptoKey&, const unsigned char* signature, unsigned signatureSize, const unsigned char* data, unsigned dataSize, WebCryptoResult result) { result.completeWithError(); } | 
| -    virtual void digest(const WebCryptoAlgorithm&, const unsigned char* data, unsigned dataSize, WebCryptoResult result) { result.completeWithError(); } | 
| -    virtual void generateKey(const WebCryptoAlgorithm&, bool extractable, WebCryptoKeyUsageMask, WebCryptoResult result) { result.completeWithError(); } | 
| -    virtual void importKey(WebCryptoKeyFormat, const unsigned char* keyData, unsigned keyDataSize, const WebCryptoAlgorithm&, bool extractable, WebCryptoKeyUsageMask, WebCryptoResult result) { result.completeWithError(); } | 
| -    virtual void exportKey(WebCryptoKeyFormat, const WebCryptoKey&, WebCryptoResult result) { result.completeWithError(); } | 
| -    virtual void wrapKey(WebCryptoKeyFormat, const WebCryptoKey& key, const WebCryptoKey& wrappingKey, const WebCryptoAlgorithm&, WebCryptoResult result) { result.completeWithError(); } | 
| -    virtual void unwrapKey(WebCryptoKeyFormat, const unsigned char* wrappedKey, unsigned wrappedKeySize, const WebCryptoKey&, const WebCryptoAlgorithm& unwrapAlgorithm, const WebCryptoAlgorithm& unwrappedKeyAlgorithm, bool extractable, WebCryptoKeyUsageMask, WebCryptoResult result) { result.completeWithError(); } | 
| +    virtual void encrypt(const WebCryptoAlgorithm&, const WebCryptoKey&, const unsigned char* data, unsigned dataSize, WebCryptoResult result) { result.completeWithError(WebCryptoErrorTypeNotSupported, ""); } | 
| +    virtual void decrypt(const WebCryptoAlgorithm&, const WebCryptoKey&, const unsigned char* data, unsigned dataSize, WebCryptoResult result) { result.completeWithError(WebCryptoErrorTypeNotSupported, ""); } | 
| +    virtual void sign(const WebCryptoAlgorithm&, const WebCryptoKey&, const unsigned char* data, unsigned dataSize, WebCryptoResult result) { result.completeWithError(WebCryptoErrorTypeNotSupported, ""); } | 
| +    virtual void verifySignature(const WebCryptoAlgorithm&, const WebCryptoKey&, const unsigned char* signature, unsigned signatureSize, const unsigned char* data, unsigned dataSize, WebCryptoResult result) { result.completeWithError(WebCryptoErrorTypeNotSupported, ""); } | 
| +    virtual void digest(const WebCryptoAlgorithm&, const unsigned char* data, unsigned dataSize, WebCryptoResult result) { result.completeWithError(WebCryptoErrorTypeNotSupported, ""); } | 
| +    virtual void generateKey(const WebCryptoAlgorithm&, bool extractable, WebCryptoKeyUsageMask, WebCryptoResult result) { result.completeWithError(WebCryptoErrorTypeNotSupported, ""); } | 
| +    virtual void importKey(WebCryptoKeyFormat, const unsigned char* keyData, unsigned keyDataSize, const WebCryptoAlgorithm&, bool extractable, WebCryptoKeyUsageMask, WebCryptoResult result) { result.completeWithError(WebCryptoErrorTypeNotSupported, ""); } | 
| +    virtual void exportKey(WebCryptoKeyFormat, const WebCryptoKey&, WebCryptoResult result) { result.completeWithError(WebCryptoErrorTypeNotSupported, ""); } | 
| +    virtual void wrapKey(WebCryptoKeyFormat, const WebCryptoKey& key, const WebCryptoKey& wrappingKey, const WebCryptoAlgorithm&, WebCryptoResult result) { result.completeWithError(WebCryptoErrorTypeNotSupported, ""); } | 
| +    virtual void unwrapKey(WebCryptoKeyFormat, const unsigned char* wrappedKey, unsigned wrappedKeySize, const WebCryptoKey&, const WebCryptoAlgorithm& unwrapAlgorithm, const WebCryptoAlgorithm& unwrappedKeyAlgorithm, bool extractable, WebCryptoKeyUsageMask, WebCryptoResult result) { result.completeWithError(WebCryptoErrorTypeNotSupported, ""); } | 
|  | 
| // This is the exception to the "Completing the request" guarantees | 
| // outlined above. This is useful for Blink internal crypto and is not part | 
|  |