blob: d587860af8775bb0bf81c1dc7f84424d22e8e179 [file] [log] [blame]
// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import "ios/web/navigation/wk_navigation_util.h"
#import <algorithm>
#import "base/apple/bundle_locations.h"
#import "base/json/json_writer.h"
#import "base/metrics/field_trial_params.h"
#import "base/strings/escape.h"
#import "base/strings/string_util.h"
#import "base/strings/sys_string_conversions.h"
#import "base/values.h"
#import "ios/web/common/features.h"
#import "ios/web/navigation/crw_error_page_helper.h"
#import "ios/web/public/navigation/navigation_item.h"
#import "ios/web/public/web_client.h"
#import "net/base/url_util.h"
#import "url/url_constants.h"
namespace web {
namespace wk_navigation_util {
// Session restoration algorithms uses pushState calls to restore back forward
// navigation list. WKWebView does not allow pushing more than 100 items per
// 30 seconds. Limiting max session size to 75 will allow web pages to use push
// state calls.
const int kMaxSessionSize = 75;
NSString* const kReferrerHeaderName = @"Referer";
int GetSafeItemRange(int last_committed_item_index,
int item_count,
int* offset,
int* size) {
*size = std::min(kMaxSessionSize, item_count);
*offset = std::min(last_committed_item_index - kMaxSessionSize / 2,
item_count - kMaxSessionSize);
*offset = std::max(*offset, 0);
return last_committed_item_index - *offset;
}
bool URLNeedsUserAgentType(const GURL& url) {
if (web::GetWebClient()->IsAppSpecificURL(url)) {
return false;
}
if (url.SchemeIs(url::kAboutScheme)) {
return false;
}
if (url.SchemeIs(url::kFileScheme) &&
[CRWErrorPageHelper isErrorPageFileURL:url]) {
return true;
}
if (url.SchemeIs(url::kFileScheme)) {
return false;
}
return true;
}
} // namespace wk_navigation_util
} // namespace web