| // 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. |
| |
| #import "ios/web/history_state_util.h" |
| |
| #include "base/logging.h" |
| #include "url/gurl.h" |
| |
| namespace web { |
| namespace history_state_util { |
| |
| bool IsHistoryStateChangeValid(const GURL& currentUrl, |
| const GURL& toUrl) { |
| // 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(currentUrl.is_valid()); |
| CHECK(toUrl.is_valid()); |
| |
| return toUrl.GetOrigin() == currentUrl.GetOrigin(); |
| } |
| |
| GURL GetHistoryStateChangeUrl(const GURL& currentUrl, |
| const GURL& baseUrl, |
| const std::string& destination) { |
| if (!baseUrl.is_valid()) |
| return GURL(); |
| GURL toUrl = baseUrl.Resolve(destination); |
| |
| if (!toUrl.is_valid() || !IsHistoryStateChangeValid(currentUrl, toUrl)) |
| return GURL(); |
| |
| return toUrl; |
| } |
| |
| } // namespace history_state_util |
| } // namespace web |