blob: 638ba7f5d6bc1d8ed6c5e2ece441102e02af4ea7 [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ios/web/public/url_schemes.h"
#include <algorithm>
#include <vector>
#include "ios/web/public/web_client.h"
#include "url/url_util.h"
namespace web {
namespace {
void AddStandardSchemeHelper(const url::SchemeWithType& scheme) {
url::AddStandardScheme(scheme.scheme, scheme.type);
}
} // namespace
void RegisterWebSchemes(bool lock_standard_schemes) {
std::vector<url::SchemeWithType> additional_standard_schemes;
GetWebClient()->AddAdditionalSchemes(&additional_standard_schemes);
std::for_each(additional_standard_schemes.begin(),
additional_standard_schemes.end(), AddStandardSchemeHelper);
// Prevent future modification of the standard schemes list. This is to
// prevent accidental creation of data races in the program. AddStandardScheme
// isn't threadsafe so must be called when GURL isn't used on any other
// thread. This is really easy to mess up, so we say that all calls to
// AddStandardScheme in Chrome must be inside this function.
if (lock_standard_schemes)
url::LockStandardSchemes();
}
} // namespace web