Home | History | Annotate | Download | only in media_galleries
      1 // Copyright 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 "base/memory/scoped_ptr.h"
      6 #include "base/run_loop.h"
      7 #include "chrome/browser/extensions/./extension_prefs_unittest.h"
      8 #include "chrome/browser/extensions/extension_service.h"
      9 #include "chrome/browser/media_galleries/media_galleries_preferences.h"
     10 #include "chrome/browser/media_galleries/media_galleries_test_util.h"
     11 #include "chrome/test/base/testing_profile.h"
     12 #include "components/storage_monitor/test_storage_monitor.h"
     13 #include "content/public/browser/browser_thread.h"
     14 #include "content/public/test/test_browser_thread.h"
     15 #include "extensions/browser/extension_prefs.h"
     16 #include "extensions/browser/extension_system.h"
     17 #include "testing/gtest/include/gtest/gtest.h"
     18 
     19 namespace {
     20 
     21 void AddGalleryPermission(MediaGalleryPrefId gallery,
     22                           bool has_access,
     23                           std::vector<MediaGalleryPermission>* vector) {
     24   MediaGalleryPermission permission;
     25   permission.pref_id = gallery;
     26   permission.has_permission = has_access;
     27   vector->push_back(permission);
     28 }
     29 
     30 }  // namespace
     31 
     32 // Test the MediaGalleries permissions functions.
     33 class MediaGalleriesPermissionsTest : public extensions::ExtensionPrefsTest {
     34  protected:
     35   MediaGalleriesPermissionsTest()
     36       : file_thread_(content::BrowserThread::FILE) {
     37   }
     38   virtual ~MediaGalleriesPermissionsTest() {}
     39 
     40   // This is the same implementation as ExtensionPrefsTest::TearDown(), except
     41   // for also resetting the ExtensionPrefs used by |gallery_prefs_| after
     42   // TestExtensionPrefs reconstructs them.
     43   virtual void TearDown() OVERRIDE {
     44     Verify();
     45 
     46     // Reset ExtensionPrefs, and re-verify.
     47     prefs_.ResetPrefRegistry();
     48     RegisterPreferences(prefs_.pref_registry().get());
     49     prefs_.RecreateExtensionPrefs();
     50     gallery_prefs_->SetExtensionPrefsForTesting(prefs());
     51     Verify();
     52     prefs_.pref_service()->CommitPendingWrite();
     53     message_loop_.RunUntilIdle();
     54 
     55     storage_monitor::TestStorageMonitor::Destroy();
     56 
     57     testing::Test::TearDown();
     58   }
     59 
     60   virtual void Initialize() OVERRIDE {
     61     file_thread_.Start();
     62 
     63     ASSERT_TRUE(storage_monitor::TestStorageMonitor::CreateAndInstall());
     64     profile_.reset(new TestingProfile);
     65     gallery_prefs_.reset(new MediaGalleriesPreferences(profile_.get()));
     66     base::RunLoop loop;
     67     gallery_prefs_->EnsureInitialized(loop.QuitClosure());
     68     loop.Run();
     69 
     70     gallery_prefs_->SetExtensionPrefsForTesting(prefs());
     71 
     72     extension1_id_ = prefs_.AddExtensionAndReturnId("test1");
     73     extension2_id_ = prefs_.AddExtensionAndReturnId("test2");
     74     extension3_id_ = prefs_.AddExtensionAndReturnId("test3");
     75     // Id4 isn't used to ensure that an empty permission list is ok.
     76     extension4_id_ = prefs_.AddExtensionAndReturnId("test4");
     77     Verify();
     78 
     79     gallery_prefs_->SetGalleryPermissionInPrefs(extension1_id_, 1, false);
     80     AddGalleryPermission(1, false, &extension1_expectation_);
     81     Verify();
     82 
     83     gallery_prefs_->SetGalleryPermissionInPrefs(extension1_id_, 2, true);
     84     AddGalleryPermission(2, true, &extension1_expectation_);
     85     Verify();
     86 
     87     gallery_prefs_->SetGalleryPermissionInPrefs(extension1_id_, 2, false);
     88     extension1_expectation_[1].has_permission = false;
     89     Verify();
     90 
     91     gallery_prefs_->SetGalleryPermissionInPrefs(extension2_id_, 1, true);
     92     gallery_prefs_->SetGalleryPermissionInPrefs(extension2_id_, 3, true);
     93     gallery_prefs_->SetGalleryPermissionInPrefs(extension2_id_, 4, true);
     94     AddGalleryPermission(1, true, &extension2_expectation_);
     95     AddGalleryPermission(3, true, &extension2_expectation_);
     96     AddGalleryPermission(4, true, &extension2_expectation_);
     97     Verify();
     98 
     99     gallery_prefs_->SetGalleryPermissionInPrefs(extension3_id_, 3, true);
    100     AddGalleryPermission(3, true, &extension3_expectation_);
    101     Verify();
    102 
    103     gallery_prefs_->RemoveGalleryPermissionsFromPrefs(3);
    104     extension2_expectation_.erase(extension2_expectation_.begin() + 1);
    105     extension3_expectation_.erase(extension3_expectation_.begin());
    106     Verify();
    107 
    108     gallery_prefs_->UnsetGalleryPermissionInPrefs(extension1_id_, 1);
    109     extension1_expectation_.erase(extension1_expectation_.begin());
    110     Verify();
    111   }
    112 
    113   virtual void Verify() OVERRIDE {
    114     struct TestData {
    115       std::string* id;
    116       std::vector<MediaGalleryPermission>* expectation;
    117     };
    118 
    119     const TestData test_data[] = {{&extension1_id_, &extension1_expectation_},
    120                                   {&extension2_id_, &extension2_expectation_},
    121                                   {&extension3_id_, &extension3_expectation_},
    122                                   {&extension4_id_, &extension4_expectation_}};
    123     for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_data); i++) {
    124       std::vector<MediaGalleryPermission> actual =
    125           gallery_prefs_->GetGalleryPermissionsFromPrefs(*test_data[i].id);
    126       EXPECT_EQ(test_data[i].expectation->size(), actual.size());
    127       for (size_t permission_entry = 0;
    128            permission_entry < test_data[i].expectation->size() &&
    129                permission_entry < actual.size();
    130            permission_entry++) {
    131         EXPECT_EQ(test_data[i].expectation->at(permission_entry).pref_id,
    132                   actual[permission_entry].pref_id);
    133         EXPECT_EQ(test_data[i].expectation->at(permission_entry).has_permission,
    134                   actual[permission_entry].has_permission);
    135       }
    136     }
    137   }
    138 
    139   std::string extension1_id_;
    140   std::string extension2_id_;
    141   std::string extension3_id_;
    142   std::string extension4_id_;
    143 
    144   std::vector<MediaGalleryPermission> extension1_expectation_;
    145   std::vector<MediaGalleryPermission> extension2_expectation_;
    146   std::vector<MediaGalleryPermission> extension3_expectation_;
    147   std::vector<MediaGalleryPermission> extension4_expectation_;
    148 
    149   // Needed for |gallery_prefs_| to initialize correctly.
    150   EnsureMediaDirectoriesExists ensure_media_directories_exists_;
    151   content::TestBrowserThread file_thread_;
    152 
    153   scoped_ptr<TestingProfile> profile_;
    154   scoped_ptr<MediaGalleriesPreferences> gallery_prefs_;
    155 };
    156 
    157 TEST_F(MediaGalleriesPermissionsTest, MediaGalleries) {}
    158