diff --git a/third_party/WebKit/LayoutTests/http/tests/credentialmanager/federatedcredential-basics.html b/third_party/WebKit/LayoutTests/http/tests/credentialmanager/federatedcredential-basics.html index 9183351fde4ff..3a02a114ae8a0 100644 --- a/third_party/WebKit/LayoutTests/http/tests/credentialmanager/federatedcredential-basics.html +++ b/third_party/WebKit/LayoutTests/http/tests/credentialmanager/federatedcredential-basics.html @@ -91,4 +91,25 @@ }); }); }, 'Construct a FederatedCredential with an invalid federation URL.'); + +test(function() { + assert_throws(new TypeError(), + () => { new FederatedCredential(); }); + assert_throws(new TypeError(), + () => { new FederatedCredential({}); }); + assert_throws(new TypeError(), + () => { new FederatedCredential({ 'id': undefined }); }); + assert_throws(new TypeError(), + () => { new FederatedCredential({ 'id': '' }); }); + assert_throws(new TypeError(), + () => { new FederatedCredential({ 'provider': undefined }); }); + assert_throws(new TypeError(), + () => { new FederatedCredential({ 'provider': '' }); }); + assert_throws(new TypeError(), + () => { new FederatedCredential({ 'id': undefined, 'provider': undefined }); }); + assert_throws(new TypeError(), + () => { new FederatedCredential({ 'id': undefined, 'provider': '' }); }); + assert_throws(new TypeError(), + () => { new FederatedCredential({ 'id': undefined, 'provider': undefined }); }); +}, 'FederatedCredential objects require IDs and Providers'); diff --git a/third_party/WebKit/LayoutTests/http/tests/credentialmanager/passwordcredential-basics.html b/third_party/WebKit/LayoutTests/http/tests/credentialmanager/passwordcredential-basics.html index 62d7a3df81121..eced29d615a75 100644 --- a/third_party/WebKit/LayoutTests/http/tests/credentialmanager/passwordcredential-basics.html +++ b/third_party/WebKit/LayoutTests/http/tests/credentialmanager/passwordcredential-basics.html @@ -87,4 +87,25 @@ credential.additionalData = additionalData; assert_equals(credential.additionalData, additionalData); }, 'Verify the basics of "idName", "passwordName", and "additionalData"'); + +test(function() { + assert_throws(new TypeError(), + () => { new PasswordCredential(); }); + assert_throws(new TypeError(), + () => { new PasswordCredential({}); }); + assert_throws(new TypeError(), + () => { new PasswordCredential({ 'id': undefined }); }); + assert_throws(new TypeError(), + () => { new PasswordCredential({ 'id': '' }); }); + assert_throws(new TypeError(), + () => { new PasswordCredential({ 'password': undefined }); }); + assert_throws(new TypeError(), + () => { new PasswordCredential({ 'password': '' }); }); + assert_throws(new TypeError(), + () => { new PasswordCredential({ 'id': undefined, 'password': undefined }); }); + assert_throws(new TypeError(), + () => { new PasswordCredential({ 'id': undefined, 'password': '' }); }); + assert_throws(new TypeError(), + () => { new PasswordCredential({ 'id': undefined, 'password': undefined }); }); +}, 'PasswordCredential objects require IDs and Passwords'); diff --git a/third_party/WebKit/Source/modules/credentialmanager/FederatedCredential.cpp b/third_party/WebKit/Source/modules/credentialmanager/FederatedCredential.cpp index a1d5b008f3577..0e145464b7710 100644 --- a/third_party/WebKit/Source/modules/credentialmanager/FederatedCredential.cpp +++ b/third_party/WebKit/Source/modules/credentialmanager/FederatedCredential.cpp @@ -19,6 +19,15 @@ FederatedCredential* FederatedCredential::create(WebFederatedCredential* webFede FederatedCredential* FederatedCredential::create(const FederatedCredentialData& data, ExceptionState& exceptionState) { + if (data.id().isEmpty()) { + exceptionState.throwTypeError("'id' must not be empty."); + return nullptr; + } + if (data.provider().isEmpty()) { + exceptionState.throwTypeError("'provider' must not be empty."); + return nullptr; + } + KURL iconURL = parseStringAsURL(data.iconURL(), exceptionState); KURL providerURL = parseStringAsURL(data.provider(), exceptionState); if (exceptionState.hadException()) diff --git a/third_party/WebKit/Source/modules/credentialmanager/PasswordCredential.cpp b/third_party/WebKit/Source/modules/credentialmanager/PasswordCredential.cpp index f539ccb5946f8..e174b504a6883 100644 --- a/third_party/WebKit/Source/modules/credentialmanager/PasswordCredential.cpp +++ b/third_party/WebKit/Source/modules/credentialmanager/PasswordCredential.cpp @@ -25,9 +25,19 @@ PasswordCredential* PasswordCredential::create(WebPasswordCredential* webPasswor PasswordCredential* PasswordCredential::create(const PasswordCredentialData& data, ExceptionState& exceptionState) { + if (data.id().isEmpty()) { + exceptionState.throwTypeError("'id' must not be empty."); + return nullptr; + } + if (data.password().isEmpty()) { + exceptionState.throwTypeError("'password' must not be empty."); + return nullptr; + } + KURL iconURL = parseStringAsURL(data.iconURL(), exceptionState); if (exceptionState.hadException()) return nullptr; + return new PasswordCredential(data.id(), data.password(), data.name(), iconURL); }