| Index: content/browser/loader/offline_policy_unittest.cc
|
| diff --git a/content/browser/loader/offline_policy_unittest.cc b/content/browser/loader/offline_policy_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..33550f578baa58515dec799e581d4767bce2b095
|
| --- /dev/null
|
| +++ b/content/browser/loader/offline_policy_unittest.cc
|
| @@ -0,0 +1,115 @@
|
| +// Copyright (c) 2013 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 "content/browser/loader/offline_policy.h"
|
| +
|
| +#include "base/command_line.h"
|
| +#include "content/public/common/content_switches.h"
|
| +#include "net/base/load_flags.h"
|
| +#include "net/http/http_response_info.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +#include "webkit/glue/resource_type.h"
|
| +
|
| +namespace content {
|
| +
|
| +class OfflinePolicyTest : public testing::Test {
|
| + public:
|
| + virtual void SetUp() {
|
| + CommandLine::ForCurrentProcess()->AppendSwitch(
|
| + switches::kEnableOfflineCacheAccess);
|
| + }
|
| +
|
| + protected:
|
| + OfflinePolicy policy_;
|
| +};
|
| +
|
| +// Confirm that the initial state of an offline object is to return
|
| +// LOAD_FROM_CACHE_IF_OFFLINE until it gets changed.
|
| +TEST_F(OfflinePolicyTest, InitialState) {
|
| + // Two loads from the same route.
|
| + EXPECT_EQ(net::LOAD_FROM_CACHE_IF_OFFLINE,
|
| + policy_.GetAdditionalLoadFlags(0, 0, 0, ResourceType::MAIN_FRAME));
|
| + EXPECT_EQ(net::LOAD_FROM_CACHE_IF_OFFLINE,
|
| + policy_.GetAdditionalLoadFlags(0, 0, 0, ResourceType::IMAGE));
|
| +
|
| + // Two loads from two different routes, not MAIN_FRAME.
|
| + EXPECT_EQ(net::LOAD_FROM_CACHE_IF_OFFLINE,
|
| + policy_.GetAdditionalLoadFlags(0, 1, 0, ResourceType::OBJECT));
|
| + EXPECT_EQ(net::LOAD_FROM_CACHE_IF_OFFLINE,
|
| + policy_.GetAdditionalLoadFlags(1, 1, 0, ResourceType::OBJECT));
|
| +}
|
| +
|
| +// Completion without any network probing doesn't change result value.
|
| +TEST_F(OfflinePolicyTest, CompletedUncertain) {
|
| + EXPECT_EQ(net::LOAD_FROM_CACHE_IF_OFFLINE,
|
| + policy_.GetAdditionalLoadFlags(0, 0, 0, ResourceType::MAIN_FRAME));
|
| + net::HttpResponseInfo response_info;
|
| + policy_.RequestCompleted(0, 0, response_info);
|
| + EXPECT_EQ(net::LOAD_FROM_CACHE_IF_OFFLINE,
|
| + policy_.GetAdditionalLoadFlags(0, 0, 0, ResourceType::OBJECT));
|
| +}
|
| +
|
| +// Completion with a failed network probe changes result value.
|
| +TEST_F(OfflinePolicyTest, CompletedNoNetwork) {
|
| + EXPECT_EQ(net::LOAD_FROM_CACHE_IF_OFFLINE,
|
| + policy_.GetAdditionalLoadFlags(0, 0, 0, ResourceType::MAIN_FRAME));
|
| + net::HttpResponseInfo response_info;
|
| + response_info.server_data_unavailable = true;
|
| + policy_.RequestCompleted(0, 0, response_info);
|
| + EXPECT_EQ(net::LOAD_ONLY_FROM_CACHE,
|
| + policy_.GetAdditionalLoadFlags(0, 0, 0, ResourceType::OBJECT));
|
| +}
|
| +
|
| +// Completion with a successful network probe changes result value.
|
| +TEST_F(OfflinePolicyTest, CompletedNetwork) {
|
| + EXPECT_EQ(net::LOAD_FROM_CACHE_IF_OFFLINE,
|
| + policy_.GetAdditionalLoadFlags(0, 0, 0, ResourceType::MAIN_FRAME));
|
| + net::HttpResponseInfo response_info;
|
| + response_info.network_accessed = true;
|
| + policy_.RequestCompleted(0, 0, response_info);
|
| + EXPECT_EQ(0, policy_.GetAdditionalLoadFlags(0, 0, 0, ResourceType::OBJECT));
|
| +}
|
| +
|
| +// A new navigation resets a state change.
|
| +TEST_F(OfflinePolicyTest, NewNavigationReset) {
|
| + EXPECT_EQ(net::LOAD_FROM_CACHE_IF_OFFLINE,
|
| + policy_.GetAdditionalLoadFlags(0, 0, 0, ResourceType::MAIN_FRAME));
|
| + net::HttpResponseInfo response_info;
|
| + response_info.network_accessed = true;
|
| + policy_.RequestCompleted(0, 0, response_info);
|
| + EXPECT_EQ(0, policy_.GetAdditionalLoadFlags(0, 0, 0, ResourceType::OBJECT));
|
| + EXPECT_EQ(net::LOAD_FROM_CACHE_IF_OFFLINE,
|
| + policy_.GetAdditionalLoadFlags(0, 0, 0, ResourceType::MAIN_FRAME));
|
| + EXPECT_EQ(net::LOAD_FROM_CACHE_IF_OFFLINE,
|
| + policy_.GetAdditionalLoadFlags(0, 0, 0, ResourceType::OBJECT));
|
| +}
|
| +
|
| +// Cache related flags inhibit the returning of any special flags.
|
| +TEST_F(OfflinePolicyTest, ConsumerFlagOverride) {
|
| + EXPECT_EQ(0, policy_.GetAdditionalLoadFlags(0, 0, net::LOAD_BYPASS_CACHE,
|
| + ResourceType::MAIN_FRAME));
|
| + net::HttpResponseInfo response_info;
|
| + response_info.server_data_unavailable = true;
|
| + policy_.RequestCompleted(0, 0, response_info);
|
| + EXPECT_EQ(0,
|
| + policy_.GetAdditionalLoadFlags(0, 0, net::LOAD_BYPASS_CACHE,
|
| + ResourceType::OBJECT));
|
| +}
|
| +
|
| +// Different routes can be in different states.
|
| +TEST_F(OfflinePolicyTest, SeparateRouteStates) {
|
| + EXPECT_EQ(net::LOAD_FROM_CACHE_IF_OFFLINE,
|
| + policy_.GetAdditionalLoadFlags(0, 0, 0, ResourceType::MAIN_FRAME));
|
| + EXPECT_EQ(net::LOAD_FROM_CACHE_IF_OFFLINE,
|
| + policy_.GetAdditionalLoadFlags(1, 0, 0, ResourceType::MAIN_FRAME));
|
| + net::HttpResponseInfo response_info;
|
| + response_info.server_data_unavailable = true;
|
| + policy_.RequestCompleted(0, 0, response_info);
|
| + EXPECT_EQ(net::LOAD_ONLY_FROM_CACHE,
|
| + policy_.GetAdditionalLoadFlags(0, 0, 0, ResourceType::OBJECT));
|
| + EXPECT_EQ(net::LOAD_FROM_CACHE_IF_OFFLINE,
|
| + policy_.GetAdditionalLoadFlags(1, 0, 0, ResourceType::OBJECT));
|
| +}
|
| +
|
| +}
|
|
|