| Index: third_party/WebKit/Source/modules/credentialmanager/CredentialsContainer.cpp
 | 
| diff --git a/third_party/WebKit/Source/modules/credentialmanager/CredentialsContainer.cpp b/third_party/WebKit/Source/modules/credentialmanager/CredentialsContainer.cpp
 | 
| index 764aa08f4acd0fe1269115c3aef4250305aa0943..014899736aefc4b60f8038c106d5a0e6e89bff97 100644
 | 
| --- a/third_party/WebKit/Source/modules/credentialmanager/CredentialsContainer.cpp
 | 
| +++ b/third_party/WebKit/Source/modules/credentialmanager/CredentialsContainer.cpp
 | 
| @@ -16,6 +16,7 @@
 | 
|  #include "core/dom/ExecutionContext.h"
 | 
|  #include "core/frame/Frame.h"
 | 
|  #include "core/frame/UseCounter.h"
 | 
| +#include "core/inspector/ConsoleMessage.h"
 | 
|  #include "core/page/FrameTree.h"
 | 
|  #include "modules/credentialmanager/Credential.h"
 | 
|  #include "modules/credentialmanager/CredentialCreationOptions.h"
 | 
| @@ -30,6 +31,7 @@
 | 
|  #include "public/platform/WebCredential.h"
 | 
|  #include "public/platform/WebCredentialManagerClient.h"
 | 
|  #include "public/platform/WebCredentialManagerError.h"
 | 
| +#include "public/platform/WebCredentialMediationRequirement.h"
 | 
|  #include "public/platform/WebFederatedCredential.h"
 | 
|  #include "public/platform/WebPasswordCredential.h"
 | 
|  
 | 
| @@ -170,6 +172,27 @@ ScriptPromise CredentialsContainer::get(
 | 
|    if (!CheckBoilerplate(resolver))
 | 
|      return promise;
 | 
|  
 | 
| +  ExecutionContext* context = ExecutionContext::From(script_state);
 | 
| +  // Set the default mediation option if none is provided.
 | 
| +  // If both 'unmediated' and 'mediation' are set log a warning if they are
 | 
| +  // contradicting.
 | 
| +  // Also sets 'mediation' appropriately when only 'unmediated' is set.
 | 
| +  // TODO(http://crbug.com/715077): Remove this when 'unmediated' is removed.
 | 
| +  String mediation = "optional";
 | 
| +  if (options.hasUnmediated() && !options.hasMediation()) {
 | 
| +    mediation = options.unmediated() ? "silent" : "optional";
 | 
| +  } else if (options.hasMediation()) {
 | 
| +    mediation = options.mediation();
 | 
| +    if (options.hasUnmediated() &&
 | 
| +        ((options.unmediated() && options.mediation() != "silent") ||
 | 
| +         (!options.unmediated() && options.mediation() != "optional"))) {
 | 
| +      context->AddConsoleMessage(ConsoleMessage::Create(
 | 
| +          kJSMessageSource, kWarningMessageLevel,
 | 
| +          "mediation: '" + options.mediation() + "' overrides unmediated: " +
 | 
| +              (options.unmediated() ? "true" : "false") + "."));
 | 
| +    }
 | 
| +  }
 | 
| +
 | 
|    Vector<KURL> providers;
 | 
|    if (options.hasFederated() && options.federated().hasProviders()) {
 | 
|      for (const auto& string : options.federated().providers()) {
 | 
| @@ -179,14 +202,26 @@ ScriptPromise CredentialsContainer::get(
 | 
|      }
 | 
|    }
 | 
|  
 | 
| -  UseCounter::Count(ExecutionContext::From(script_state),
 | 
| -                    options.unmediated()
 | 
| -                        ? UseCounter::kCredentialManagerGetWithoutUI
 | 
| -                        : UseCounter::kCredentialManagerGetWithUI);
 | 
| +  WebCredentialMediationRequirement requirement;
 | 
|  
 | 
| -  CredentialManagerClient::From(ExecutionContext::From(script_state))
 | 
| -      ->DispatchGet(options.unmediated(), options.password(), providers,
 | 
| -                    new RequestCallbacks(resolver));
 | 
| +  if (mediation == "silent") {
 | 
| +    UseCounter::Count(context,
 | 
| +                      UseCounter::kCredentialManagerGetMediationSilent);
 | 
| +    requirement = WebCredentialMediationRequirement::kSilent;
 | 
| +  } else if (mediation == "optional") {
 | 
| +    UseCounter::Count(context,
 | 
| +                      UseCounter::kCredentialManagerGetMediationOptional);
 | 
| +    requirement = WebCredentialMediationRequirement::kOptional;
 | 
| +  } else {
 | 
| +    DCHECK_EQ("required", mediation);
 | 
| +    UseCounter::Count(context,
 | 
| +                      UseCounter::kCredentialManagerGetMediationRequired);
 | 
| +    requirement = WebCredentialMediationRequirement::kRequired;
 | 
| +  }
 | 
| +
 | 
| +  CredentialManagerClient::From(context)->DispatchGet(
 | 
| +      requirement, options.password(), providers,
 | 
| +      new RequestCallbacks(resolver));
 | 
|    return promise;
 | 
|  }
 | 
|  
 | 
| 
 |