Home | History | Annotate | Download | only in options
      1 // Copyright (c) 2012 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 "chrome/browser/ui/webui/options/pepper_flash_content_settings_utils.h"
      6 
      7 #include "base/basictypes.h"
      8 #include "testing/gtest/include/gtest/gtest.h"
      9 
     10 using options::MediaException;
     11 using options::MediaExceptions;
     12 using options::PepperFlashContentSettingsUtils;
     13 
     14 namespace {
     15 
     16 MediaExceptions ConvertAndSort(const MediaException* items, size_t count) {
     17   MediaExceptions result(items, items + count);
     18   PepperFlashContentSettingsUtils::SortMediaExceptions(&result);
     19   return result;
     20 }
     21 
     22 }  // namespace
     23 
     24 TEST(PepperFlashContentSettingsUtilsTest, SortMediaExceptions) {
     25   MediaException entry_1(ContentSettingsPattern::FromString("www.google.com"),
     26                          CONTENT_SETTING_ALLOW, CONTENT_SETTING_ASK);
     27   MediaException entry_2(ContentSettingsPattern::FromString("www.youtube.com"),
     28                          CONTENT_SETTING_BLOCK, CONTENT_SETTING_DEFAULT);
     29   MediaException entry_3(ContentSettingsPattern::Wildcard(),
     30                          CONTENT_SETTING_ASK, CONTENT_SETTING_BLOCK);
     31   MediaException entry_4(ContentSettingsPattern(),
     32                          CONTENT_SETTING_SESSION_ONLY, CONTENT_SETTING_ALLOW);
     33 
     34   MediaExceptions list_1;
     35   list_1.push_back(entry_1);
     36   list_1.push_back(entry_2);
     37   list_1.push_back(entry_3);
     38   list_1.push_back(entry_4);
     39 
     40   MediaExceptions list_2;
     41   list_2.push_back(entry_1);
     42   list_2.push_back(entry_3);
     43   list_2.push_back(entry_2);
     44   list_2.push_back(entry_4);
     45 
     46   MediaExceptions list_3;
     47   list_3.push_back(entry_4);
     48   list_3.push_back(entry_1);
     49   list_3.push_back(entry_2);
     50   list_3.push_back(entry_3);
     51 
     52   EXPECT_NE(list_1, list_2);
     53   EXPECT_NE(list_2, list_3);
     54   EXPECT_NE(list_3, list_1);
     55 
     56   PepperFlashContentSettingsUtils::SortMediaExceptions(&list_1);
     57   PepperFlashContentSettingsUtils::SortMediaExceptions(&list_2);
     58   PepperFlashContentSettingsUtils::SortMediaExceptions(&list_3);
     59 
     60   EXPECT_EQ(list_1, list_2);
     61   EXPECT_EQ(list_2, list_3);
     62 }
     63 
     64 TEST(PepperFlashContentSettingsUtilsTest, AreMediaExceptionsEqual) {
     65   {
     66     // Empty lists are equal.
     67     // Default settings are not compared directly, so it is possible to return
     68     // true when they are different.
     69     EXPECT_TRUE(PepperFlashContentSettingsUtils::AreMediaExceptionsEqual(
     70         CONTENT_SETTING_BLOCK,
     71         MediaExceptions(),
     72         CONTENT_SETTING_ASK,
     73         MediaExceptions(),
     74         false,
     75         false));
     76   }
     77 
     78   {
     79     MediaException exceptions_1[] = {
     80       MediaException(ContentSettingsPattern::FromString("www.google.com"),
     81                      CONTENT_SETTING_ALLOW, CONTENT_SETTING_ALLOW),
     82       MediaException(ContentSettingsPattern::FromString("www.youtube.com"),
     83                      CONTENT_SETTING_ASK, CONTENT_SETTING_ASK)
     84     };
     85 
     86     MediaException exceptions_2[] = {
     87       MediaException(ContentSettingsPattern::FromString("www.google.com"),
     88                      CONTENT_SETTING_ALLOW, CONTENT_SETTING_ALLOW)
     89     };
     90 
     91     // The exception of "www.youtube.com" in |exceptions_1| should not affect
     92     // the result, because it has the same settings as |default_setting_2|.
     93     EXPECT_TRUE(PepperFlashContentSettingsUtils::AreMediaExceptionsEqual(
     94         CONTENT_SETTING_ALLOW,
     95         ConvertAndSort(exceptions_1, arraysize(exceptions_1)),
     96         CONTENT_SETTING_ASK,
     97         ConvertAndSort(exceptions_2, arraysize(exceptions_2)),
     98         false,
     99         false));
    100     EXPECT_TRUE(PepperFlashContentSettingsUtils::AreMediaExceptionsEqual(
    101         CONTENT_SETTING_ASK,
    102         ConvertAndSort(exceptions_2, arraysize(exceptions_2)),
    103         CONTENT_SETTING_ALLOW,
    104         ConvertAndSort(exceptions_1, arraysize(exceptions_1)),
    105         false,
    106         false));
    107     // Changing |default_setting_2| should change the result.
    108     EXPECT_FALSE(PepperFlashContentSettingsUtils::AreMediaExceptionsEqual(
    109         CONTENT_SETTING_ALLOW,
    110         ConvertAndSort(exceptions_1, arraysize(exceptions_1)),
    111         CONTENT_SETTING_ALLOW,
    112         ConvertAndSort(exceptions_2, arraysize(exceptions_2)),
    113         false,
    114         false));
    115   }
    116 
    117   {
    118     // Similar to the previous block, but reoder the exceptions. The outcome
    119     // should be the same.
    120     MediaException exceptions_1[] = {
    121       MediaException(ContentSettingsPattern::FromString("www.youtube.com"),
    122                      CONTENT_SETTING_ASK, CONTENT_SETTING_ASK),
    123       MediaException(ContentSettingsPattern::FromString("www.google.com"),
    124                      CONTENT_SETTING_ALLOW, CONTENT_SETTING_ALLOW)
    125     };
    126 
    127     MediaException exceptions_2[] = {
    128       MediaException(ContentSettingsPattern::FromString("www.google.com"),
    129                      CONTENT_SETTING_ALLOW, CONTENT_SETTING_ALLOW)
    130     };
    131 
    132     EXPECT_TRUE(PepperFlashContentSettingsUtils::AreMediaExceptionsEqual(
    133         CONTENT_SETTING_ALLOW,
    134         ConvertAndSort(exceptions_1, arraysize(exceptions_1)),
    135         CONTENT_SETTING_ASK,
    136         ConvertAndSort(exceptions_2, arraysize(exceptions_2)),
    137         false,
    138         false));
    139     EXPECT_FALSE(PepperFlashContentSettingsUtils::AreMediaExceptionsEqual(
    140         CONTENT_SETTING_ALLOW,
    141         ConvertAndSort(exceptions_1, arraysize(exceptions_1)),
    142         CONTENT_SETTING_ALLOW,
    143         ConvertAndSort(exceptions_2, arraysize(exceptions_2)),
    144         false,
    145         false));
    146   }
    147 
    148   {
    149     MediaException exceptions_1[] = {
    150       MediaException(ContentSettingsPattern::FromString("www.google.com"),
    151                      CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK)
    152     };
    153 
    154     MediaException exceptions_2[] = {
    155       MediaException(ContentSettingsPattern::FromString("www.google.com"),
    156                      CONTENT_SETTING_ALLOW, CONTENT_SETTING_ALLOW)
    157     };
    158 
    159     // Test that |ignore_video_setting| works.
    160     EXPECT_TRUE(PepperFlashContentSettingsUtils::AreMediaExceptionsEqual(
    161         CONTENT_SETTING_ASK,
    162         ConvertAndSort(exceptions_1, arraysize(exceptions_1)),
    163         CONTENT_SETTING_ASK,
    164         ConvertAndSort(exceptions_2, arraysize(exceptions_2)),
    165         false,
    166         true));
    167     EXPECT_FALSE(PepperFlashContentSettingsUtils::AreMediaExceptionsEqual(
    168         CONTENT_SETTING_ASK,
    169         ConvertAndSort(exceptions_1, arraysize(exceptions_1)),
    170         CONTENT_SETTING_ASK,
    171         ConvertAndSort(exceptions_2, arraysize(exceptions_2)),
    172         false,
    173         false));
    174   }
    175 
    176   {
    177     MediaException exceptions_1[] = {
    178       MediaException(ContentSettingsPattern::FromString("www.google.com"),
    179                      CONTENT_SETTING_BLOCK, CONTENT_SETTING_ALLOW)
    180     };
    181 
    182     MediaException exceptions_2[] = {
    183       MediaException(ContentSettingsPattern::FromString("www.google.com"),
    184                      CONTENT_SETTING_ALLOW, CONTENT_SETTING_ALLOW)
    185     };
    186 
    187     // Test that |ignore_audio_setting| works.
    188     EXPECT_TRUE(PepperFlashContentSettingsUtils::AreMediaExceptionsEqual(
    189         CONTENT_SETTING_ASK,
    190         ConvertAndSort(exceptions_1, arraysize(exceptions_1)),
    191         CONTENT_SETTING_ASK,
    192         ConvertAndSort(exceptions_2, arraysize(exceptions_2)),
    193         true,
    194         false));
    195     EXPECT_FALSE(PepperFlashContentSettingsUtils::AreMediaExceptionsEqual(
    196         CONTENT_SETTING_ASK,
    197         ConvertAndSort(exceptions_1, arraysize(exceptions_1)),
    198         CONTENT_SETTING_ASK,
    199         ConvertAndSort(exceptions_2, arraysize(exceptions_2)),
    200         false,
    201         false));
    202   }
    203 }
    204