Home | History | Annotate | Download | only in loader
      1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "content/browser/loader/offline_policy.h"
      6 
      7 #include "base/command_line.h"
      8 #include "content/public/common/content_switches.h"
      9 #include "net/base/load_flags.h"
     10 #include "net/http/http_response_info.h"
     11 #include "testing/gtest/include/gtest/gtest.h"
     12 #include "webkit/common/resource_type.h"
     13 
     14 namespace content {
     15 
     16 class OfflinePolicyTest : public testing::Test {
     17  protected:
     18   virtual void SetUp() {
     19     CommandLine::ForCurrentProcess()->AppendSwitch(
     20         switches::kEnableOfflineCacheAccess);
     21     policy_ = new OfflinePolicy;
     22   }
     23 
     24   virtual void TearDown() {
     25     delete policy_;
     26     policy_ = NULL;
     27   }
     28 
     29   OfflinePolicy* policy_;
     30 };
     31 
     32 // Confirm that the initial state of an offline object is to return
     33 // LOAD_FROM_CACHE_IF_OFFLINE until it gets changed.
     34 TEST_F(OfflinePolicyTest, InitialState) {
     35   // Two loads without any reset, no UpdateStateForSuccessfullyStartedRequest.
     36   EXPECT_EQ(net::LOAD_FROM_CACHE_IF_OFFLINE,
     37             policy_->GetAdditionalLoadFlags(0, true));
     38   EXPECT_EQ(net::LOAD_FROM_CACHE_IF_OFFLINE,
     39             policy_->GetAdditionalLoadFlags(0, false));
     40 }
     41 
     42 // Completion without any network probing doesn't change result value.
     43 TEST_F(OfflinePolicyTest, CompletedUncertain) {
     44   EXPECT_EQ(net::LOAD_FROM_CACHE_IF_OFFLINE,
     45             policy_->GetAdditionalLoadFlags(0, true));
     46   net::HttpResponseInfo response_info;
     47   policy_->UpdateStateForSuccessfullyStartedRequest(response_info);
     48   EXPECT_EQ(net::LOAD_FROM_CACHE_IF_OFFLINE,
     49             policy_->GetAdditionalLoadFlags(0, false));
     50 }
     51 
     52 // Completion with a failed network probe changes result value.
     53 TEST_F(OfflinePolicyTest, CompletedNoNetwork) {
     54   EXPECT_EQ(net::LOAD_FROM_CACHE_IF_OFFLINE,
     55             policy_->GetAdditionalLoadFlags(0, true));
     56   net::HttpResponseInfo response_info;
     57   response_info.server_data_unavailable = true;
     58   policy_->UpdateStateForSuccessfullyStartedRequest(response_info);
     59   EXPECT_EQ(net::LOAD_ONLY_FROM_CACHE,
     60             policy_->GetAdditionalLoadFlags(0, false));
     61 }
     62 
     63 // Completion with a successful network probe changes result value.
     64 TEST_F(OfflinePolicyTest, CompletedNetwork) {
     65   EXPECT_EQ(net::LOAD_FROM_CACHE_IF_OFFLINE,
     66             policy_->GetAdditionalLoadFlags(0, true));
     67   net::HttpResponseInfo response_info;
     68   response_info.network_accessed = true;
     69   policy_->UpdateStateForSuccessfullyStartedRequest(response_info);
     70   EXPECT_EQ(0, policy_->GetAdditionalLoadFlags(0, false));
     71 }
     72 
     73 // A new navigation resets a state change.
     74 TEST_F(OfflinePolicyTest, NewNavigationReset) {
     75   EXPECT_EQ(net::LOAD_FROM_CACHE_IF_OFFLINE,
     76             policy_->GetAdditionalLoadFlags(0, true));
     77   net::HttpResponseInfo response_info;
     78   response_info.network_accessed = true;
     79   policy_->UpdateStateForSuccessfullyStartedRequest(response_info);
     80   EXPECT_EQ(0, policy_->GetAdditionalLoadFlags(0, false));
     81   EXPECT_EQ(net::LOAD_FROM_CACHE_IF_OFFLINE,
     82             policy_->GetAdditionalLoadFlags(0, true));
     83   EXPECT_EQ(net::LOAD_FROM_CACHE_IF_OFFLINE,
     84             policy_->GetAdditionalLoadFlags(0, false));
     85 }
     86 
     87 // Cache related flags inhibit the returning of any special flags.
     88 TEST_F(OfflinePolicyTest, ConsumerFlagOverride) {
     89   EXPECT_EQ(0, policy_->GetAdditionalLoadFlags(net::LOAD_BYPASS_CACHE, true));
     90   net::HttpResponseInfo response_info;
     91   response_info.server_data_unavailable = true;
     92   policy_->UpdateStateForSuccessfullyStartedRequest(response_info);
     93   EXPECT_EQ(0, policy_->GetAdditionalLoadFlags(net::LOAD_BYPASS_CACHE, false));
     94 }
     95 
     96 }
     97