1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/geolocation/geolocation_exceptions_table_model.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/content_settings_helper.h" 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/testing_profile.h" 8dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/browser_thread.h" 9dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/renderer_host/test_render_view_host.h" 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "grit/generated_resources.h" 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gtest/include/gtest/gtest.h" 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace { 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst GURL kUrl0("http://www.example.com"); 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst GURL kUrl1("http://www.example1.com"); 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst GURL kUrl2("http://www.example2.com"); 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass GeolocationExceptionsTableModelTest : public RenderViewHostTestHarness { 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GeolocationExceptionsTableModelTest() 21731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick : ui_thread_(BrowserThread::UI, MessageLoop::current()) {} 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual ~GeolocationExceptionsTableModelTest() {} 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void SetUp() { 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch RenderViewHostTestHarness::SetUp(); 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ResetModel(); 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void TearDown() { 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch model_.reset(NULL); 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch RenderViewHostTestHarness::TearDown(); 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void ResetModel() { 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch model_.reset(new GeolocationExceptionsTableModel( 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch profile()->GetGeolocationContentSettingsMap())); 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void CreateAllowedSamples() { 41513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch scoped_refptr<GeolocationContentSettingsMap> map( 42513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch profile()->GetGeolocationContentSettingsMap()); 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch map->SetContentSetting(kUrl0, kUrl0, CONTENT_SETTING_ALLOW); 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch map->SetContentSetting(kUrl0, kUrl1, CONTENT_SETTING_ALLOW); 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch map->SetContentSetting(kUrl0, kUrl2, CONTENT_SETTING_ALLOW); 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ResetModel(); 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(3, model_->RowCount()); 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected: 51731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread ui_thread_; 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<GeolocationExceptionsTableModel> model_; 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(GeolocationExceptionsTableModelTest, CanRemoveException) { 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(0, model_->RowCount()); 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 58513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch scoped_refptr<GeolocationContentSettingsMap> map( 59513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch profile()->GetGeolocationContentSettingsMap()); 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Ensure a single entry can be removed. 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch map->SetContentSetting(kUrl0, kUrl0, CONTENT_SETTING_ALLOW); 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ResetModel(); 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, model_->RowCount()); 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GeolocationExceptionsTableModel::Rows rows; 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch rows.insert(0U); 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(model_->CanRemoveRows(rows)); 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Ensure an entry with children can't be removed. 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch map->SetContentSetting(kUrl0, kUrl0, CONTENT_SETTING_DEFAULT); 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch map->SetContentSetting(kUrl0, kUrl1, CONTENT_SETTING_ALLOW); 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch map->SetContentSetting(kUrl0, kUrl2, CONTENT_SETTING_BLOCK); 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ResetModel(); 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(3, model_->RowCount()); 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(model_->CanRemoveRows(rows)); 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Ensure it can be removed if removing all children. 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch rows.clear(); 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch rows.insert(1U); 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch rows.insert(2U); 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(model_->CanRemoveRows(rows)); 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(GeolocationExceptionsTableModelTest, RemoveExceptions) { 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CreateAllowedSamples(); 87513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch scoped_refptr<GeolocationContentSettingsMap> map( 88513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch profile()->GetGeolocationContentSettingsMap()); 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Test removing parent exception. 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GeolocationExceptionsTableModel::Rows rows; 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch rows.insert(0U); 93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch model_->RemoveRows(rows); 94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(CONTENT_SETTING_ASK, map->GetContentSetting(kUrl0, kUrl0)); 95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(CONTENT_SETTING_ALLOW, map->GetContentSetting(kUrl0, kUrl1)); 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(CONTENT_SETTING_ALLOW, map->GetContentSetting(kUrl0, kUrl2)); 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ResetModel(); 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(3, model_->RowCount()); 100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Test removing remaining children. 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch rows.clear(); 103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch rows.insert(1U); 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch rows.insert(2U); 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch model_->RemoveRows(rows); 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(0, model_->RowCount()); 107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(CONTENT_SETTING_ASK, map->GetContentSetting(kUrl0, kUrl0)); 108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(CONTENT_SETTING_ASK, map->GetContentSetting(kUrl0, kUrl1)); 109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(CONTENT_SETTING_ASK, map->GetContentSetting(kUrl0, kUrl2)); 110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 112c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(GeolocationExceptionsTableModelTest, RemoveAll) { 113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CreateAllowedSamples(); 114513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch scoped_refptr<GeolocationContentSettingsMap> map( 115513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch profile()->GetGeolocationContentSettingsMap()); 116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch model_->RemoveAll(); 118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(CONTENT_SETTING_ASK, map->GetContentSetting(kUrl0, kUrl0)); 119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(CONTENT_SETTING_ASK, map->GetContentSetting(kUrl0, kUrl1)); 120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(CONTENT_SETTING_ASK, map->GetContentSetting(kUrl0, kUrl2)); 121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(0, model_->RowCount()); 122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 124c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(GeolocationExceptionsTableModelTest, GetText) { 125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CreateAllowedSamples(); 126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Ensure the parent doesn't have any indentation. 1283f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen string16 text = model_->GetText(0, IDS_EXCEPTIONS_HOSTNAME_HEADER); 1293f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen EXPECT_EQ(content_settings_helper::OriginToString16(kUrl0), text); 130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Ensure there's some indentation on the children nodes. 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch text = model_->GetText(1, IDS_EXCEPTIONS_HOSTNAME_HEADER); 1333f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen EXPECT_NE(content_settings_helper::OriginToString16(kUrl1), text); 1343f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen EXPECT_NE(string16::npos, 1353f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen text.find(content_settings_helper::OriginToString16(kUrl1))); 136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch text = model_->GetText(2, IDS_EXCEPTIONS_HOSTNAME_HEADER); 1383f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen EXPECT_NE(content_settings_helper::OriginToString16(kUrl2), text); 1393f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen EXPECT_NE(string16::npos, 1403f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen text.find(content_settings_helper::OriginToString16(kUrl2))); 141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 14272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 14372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} // namespace 144