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..91256c67a6b7494f23d95b987b0a4f5c91487cbe |
--- /dev/null |
+++ b/content/browser/loader/offline_policy_unittest.cc |
@@ -0,0 +1,96 @@ |
+// 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 { |
+ protected: |
+ virtual void SetUp() { |
+ CommandLine::ForCurrentProcess()->AppendSwitch( |
+ switches::kEnableOfflineCacheAccess); |
+ policy_ = new OfflinePolicy; |
+ } |
+ |
+ virtual void TearDown() { |
+ delete policy_; |
+ policy_ = NULL; |
+ } |
+ |
+ 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 without any reset, no UpdateStateForCompletedRequest. |
+ EXPECT_EQ(net::LOAD_FROM_CACHE_IF_OFFLINE, |
+ policy_->GetAdditionalLoadFlags(0, true)); |
+ EXPECT_EQ(net::LOAD_FROM_CACHE_IF_OFFLINE, |
+ policy_->GetAdditionalLoadFlags(0, false)); |
+} |
+ |
+// 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, true)); |
+ net::HttpResponseInfo response_info; |
+ policy_->UpdateStateForCompletedRequest(response_info); |
+ EXPECT_EQ(net::LOAD_FROM_CACHE_IF_OFFLINE, |
+ policy_->GetAdditionalLoadFlags(0, false)); |
+} |
+ |
+// Completion with a failed network probe changes result value. |
+TEST_F(OfflinePolicyTest, CompletedNoNetwork) { |
+ EXPECT_EQ(net::LOAD_FROM_CACHE_IF_OFFLINE, |
+ policy_->GetAdditionalLoadFlags(0, true)); |
+ net::HttpResponseInfo response_info; |
+ response_info.server_data_unavailable = true; |
+ policy_->UpdateStateForCompletedRequest(response_info); |
+ EXPECT_EQ(net::LOAD_ONLY_FROM_CACHE, |
+ policy_->GetAdditionalLoadFlags(0, false)); |
+} |
+ |
+// Completion with a successful network probe changes result value. |
+TEST_F(OfflinePolicyTest, CompletedNetwork) { |
+ EXPECT_EQ(net::LOAD_FROM_CACHE_IF_OFFLINE, |
+ policy_->GetAdditionalLoadFlags(0, true)); |
+ net::HttpResponseInfo response_info; |
+ response_info.network_accessed = true; |
+ policy_->UpdateStateForCompletedRequest(response_info); |
+ EXPECT_EQ(0, policy_->GetAdditionalLoadFlags(0, false)); |
+} |
+ |
+// A new navigation resets a state change. |
+TEST_F(OfflinePolicyTest, NewNavigationReset) { |
+ EXPECT_EQ(net::LOAD_FROM_CACHE_IF_OFFLINE, |
+ policy_->GetAdditionalLoadFlags(0, true)); |
+ net::HttpResponseInfo response_info; |
+ response_info.network_accessed = true; |
+ policy_->UpdateStateForCompletedRequest(response_info); |
+ EXPECT_EQ(0, policy_->GetAdditionalLoadFlags(0, false)); |
+ EXPECT_EQ(net::LOAD_FROM_CACHE_IF_OFFLINE, |
+ policy_->GetAdditionalLoadFlags(0, true)); |
+ EXPECT_EQ(net::LOAD_FROM_CACHE_IF_OFFLINE, |
+ policy_->GetAdditionalLoadFlags(0, false)); |
+} |
+ |
+// Cache related flags inhibit the returning of any special flags. |
+TEST_F(OfflinePolicyTest, ConsumerFlagOverride) { |
+ EXPECT_EQ(0, policy_->GetAdditionalLoadFlags(net::LOAD_BYPASS_CACHE, true)); |
+ net::HttpResponseInfo response_info; |
+ response_info.server_data_unavailable = true; |
+ policy_->UpdateStateForCompletedRequest(response_info); |
+ EXPECT_EQ(0, policy_->GetAdditionalLoadFlags(net::LOAD_BYPASS_CACHE, false)); |
+} |
+ |
+} |