示例#1
0
void ExecutionContext::parseAndSetReferrerPolicy(const String& policies,
                                                 bool supportLegacyKeywords) {
  ReferrerPolicy referrerPolicy = ReferrerPolicyDefault;

  Vector<String> tokens;
  policies.split(',', true, tokens);
  for (const auto& token : tokens) {
    ReferrerPolicy currentResult;
    if ((supportLegacyKeywords
             ? SecurityPolicy::referrerPolicyFromStringWithLegacyKeywords(
                   token, &currentResult)
             : SecurityPolicy::referrerPolicyFromString(token,
                                                        &currentResult))) {
      referrerPolicy = currentResult;
    }
  }

  if (referrerPolicy == ReferrerPolicyDefault) {
    addConsoleMessage(ConsoleMessage::create(
        RenderingMessageSource, ErrorMessageLevel,
        "Failed to set referrer policy: The value '" + policies +
            "' is not one of " +
            (supportLegacyKeywords
                 ? "'always', 'default', 'never', 'origin-when-crossorigin', "
                 : "") +
            "'no-referrer', 'no-referrer-when-downgrade', 'origin', "
            "'origin-when-cross-origin', or 'unsafe-url'. The referrer policy "
            "has been left unchanged."));
    return;
  }

  setReferrerPolicy(referrerPolicy);
}
示例#2
0
static bool buildOptions(FetchRequest::InternalRequest& request, ScriptExecutionContext& context, const Dictionary& init)
{
    JSC::JSValue window;
    if (init.get("window", window)) {
        if (!window.isNull())
            return false;
    }

    if (!setReferrer(request, context, init))
        return false;

    String value;
    if (init.get("referrerPolicy", value) && !setReferrerPolicy(request.options, value))
        return false;

    if (init.get("mode", value) && !setMode(request.options, value))
        return false;
    if (request.options.mode() == FetchOptions::Mode::Navigate)
        return false;

    if (init.get("credentials", value) && !setCredentials(request.options, value))
        return false;

    if (init.get("cache", value) && !setCache(request.options, value))
        return false;

    if (init.get("redirect", value) && !setRedirect(request.options, value))
        return false;

    init.get("integrity", request.integrity);

    if (init.get("method", value) && !setMethod(request.request, value))
        return false;

    return true;
}