// Copyright 2012 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/history_state_util.h" #include "base/check.h" #include "url/gurl.h" namespace web { namespace history_state_util { bool IsHistoryStateChangeValid(const GURL& current_url, const GURL& to_url) { // These two checks are very important to the security of the page. We cannot // allow the page to change the state to an invalid URL. CHECK(current_url.is_valid()); CHECK(to_url.is_valid()); return to_url.DeprecatedGetOriginAsURL() == current_url.DeprecatedGetOriginAsURL(); } GURL GetHistoryStateChangeUrl(const GURL& current_url, const GURL& base_url, const std::string& destination) { if (!base_url.is_valid()) return GURL(); GURL to_url = base_url.Resolve(destination); if (!to_url.is_valid() || !IsHistoryStateChangeValid(current_url, to_url)) return GURL(); return to_url; } } // namespace history_state_util } // namespace web