Home | History | Annotate | Download | only in searchbox
      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/basictypes.h"
      6 #include "chrome/common/instant_types.h"
      7 #include "testing/gtest/include/gtest/gtest.h"
      8 #include "url/gurl.h"
      9 
     10 namespace internal {
     11 
     12 // Defined in searchbox.cc
     13 bool GetRestrictedIDFromThumbnailUrl(int render_view_id,
     14                                      const GURL& url,
     15                                      InstantRestrictedID* id);
     16 
     17 // Defined in searchbox.cc
     18 bool GetRestrictedIDFromFaviconUrl(int render_view_id,
     19                                    const GURL& url,
     20                                    std::string* favicon_params,
     21                                    InstantRestrictedID* rid);
     22 
     23 TEST(SearchBoxUtilTest, GetInstantRestrictedIDFromTransientURL) {
     24   const int kInvalidRenderViewID = 920;
     25   const int kValidRenderViewID = 1;
     26 
     27   const struct {
     28     int render_view_id;
     29     GURL transient_url;
     30     InstantRestrictedID expected_rid;
     31     bool expected_return_val;
     32   } test_cases[] = {
     33     // RenderView ID matches the view id specified in the transient url.
     34     {kValidRenderViewID, GURL("chrome-search://favicon/1/2"), 2, true},
     35     {kValidRenderViewID, GURL("chrome-search://thumb/1/2"), 2, true},
     36 
     37     // RenderView ID does not match the view id specified in the transient url.
     38     {kInvalidRenderViewID, GURL("chrome-search://favicon/1/2"), 0, false},
     39     {kInvalidRenderViewID, GURL("chrome-search://thumb/1/2"), 0, false},
     40 
     41     // Invalid transient urls.
     42     {kValidRenderViewID, GURL("chrome-search://thumb"), 0, false},
     43     {kValidRenderViewID, GURL("chrome-search://thumb/"), 0, false},
     44     {kValidRenderViewID, GURL("chrome-search://thumb/123"), 0, false},
     45     {kValidRenderViewID, GURL("chrome-search://thumb/xyz"), 0, false},
     46     {kValidRenderViewID, GURL("chrome-search://thumb/123/"), 0, false},
     47     {kValidRenderViewID, GURL("chrome-search://thumb/123/xyz"), 0, false},
     48     {kValidRenderViewID, GURL("chrome-search://favicon"), 0, false},
     49     {kValidRenderViewID, GURL("chrome-search://favicon/"), 0, false},
     50     {kValidRenderViewID, GURL("chrome-search://favicon/123"), 0, false},
     51     {kValidRenderViewID, GURL("chrome-search://favicon/xyz"), 0, false},
     52     {kValidRenderViewID, GURL("chrome-search://favicon/123/"), 0, false},
     53     {kValidRenderViewID, GURL("chrome-search://favicon/123/xyz"), 0, false}
     54   };
     55 
     56   InstantRestrictedID rid = 0;
     57   for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) {
     58     bool return_val = GetRestrictedIDFromThumbnailUrl(
     59         test_cases[i].render_view_id, test_cases[i].transient_url, &rid);
     60     EXPECT_EQ(test_cases[i].expected_return_val, return_val);
     61     EXPECT_EQ(test_cases[i].expected_rid, rid);
     62     rid = 0;
     63   }
     64 }
     65 
     66 TEST(SearchBoxUtilTest, ParseRestrictedFaviconTransientUrl) {
     67   const int kInvalidRenderViewID = 920;
     68   const int kValidRenderViewID = 1;
     69 
     70   const struct {
     71     int render_view_id;
     72     GURL transient_url;
     73     std::string expected_favicon_params;
     74     InstantRestrictedID expected_rid;
     75     bool expected_return_val;
     76   } test_cases[] = {
     77     // RenderView ID matches the view id specified in the transient url.
     78     {
     79       kValidRenderViewID,
     80       GURL("chrome-search://favicon/1/2"),
     81       "",
     82       2,
     83       true
     84     },
     85     {
     86       kValidRenderViewID,
     87       GURL("chrome-search://favicon/size/16@2x/1/2"),
     88       "size/16@2x/",
     89       2,
     90       true
     91     },
     92     {
     93       kValidRenderViewID,
     94       GURL("chrome-search://favicon/largest/1/2"),
     95       "largest/",
     96       2,
     97       true
     98     },
     99     {
    100       kValidRenderViewID,
    101       GURL("chrome-search://favicon/origin/1/2"),
    102       "origin/",
    103       2,
    104       true
    105     },
    106     {
    107       kValidRenderViewID,
    108       GURL("chrome-search://favicon/iconurl/1/2"),
    109       "iconurl/",
    110       2,
    111       true
    112     },
    113 
    114     // RenderView ID does not match the view id specified in the transient url.
    115     {
    116       kInvalidRenderViewID,
    117       GURL("chrome-search://favicon/1/2"),
    118       "",
    119       0,
    120       true
    121     },
    122     {
    123       kInvalidRenderViewID,
    124       GURL("chrome-search://favicon/size/16@2x/1/2"),
    125       "size/16@2x/",
    126       0,
    127       true
    128     },
    129     {
    130       kInvalidRenderViewID,
    131       GURL("chrome-search://favicon/largest/1/2"),
    132       "largest/",
    133       0,
    134       true
    135     },
    136     {
    137       kInvalidRenderViewID,
    138       GURL("chrome-search://favicon/origin/1/2"),
    139       "origin/",
    140       0,
    141       true
    142     },
    143     {
    144       kInvalidRenderViewID,
    145       GURL("chrome-search://favicon/iconurl/1/2"),
    146       "iconurl/",
    147       0,
    148       true
    149     },
    150 
    151     // Invalid transient urls.
    152     {
    153       kValidRenderViewID,
    154       GURL("chrome-search://favicon"),
    155       "",
    156       0,
    157       false
    158     },
    159     {
    160       kValidRenderViewID,
    161       GURL("chrome-search://favicon/"),
    162       "",
    163       0,
    164       false
    165     },
    166     {
    167       kValidRenderViewID,
    168       GURL("chrome-search://favicon/size/16@2x"),
    169       "",
    170       0,
    171       false
    172     },
    173     {
    174       kValidRenderViewID,
    175       GURL("chrome-search://favicon/size"),
    176       "",
    177       0,
    178       true
    179     },
    180     {
    181       kValidRenderViewID,
    182       GURL("chrome-search://favicon/size/16@2x/123"),
    183       "size/16@2x/",
    184       0,
    185       true
    186     },
    187     {
    188       kValidRenderViewID,
    189       GURL("chrome-search://favicon/size/16@2x/xyz"),
    190       "size/16@2x/",
    191       0,
    192       true
    193     },
    194     {
    195       kValidRenderViewID,
    196       GURL("chrome-search://favicon/size/16@2x/123/"),
    197       "size/16@2x/",
    198       0,
    199       true
    200     },
    201     {
    202       kValidRenderViewID,
    203       GURL("chrome-search://favicon/size/16@2x/123/xyz"),
    204       "size/16@2x/",
    205       0,
    206       true
    207     },
    208     {
    209       kValidRenderViewID,
    210       GURL("chrome-search://favicon/invalidparameter/16@2x/1/2"),
    211       "",
    212       0,
    213       true
    214     }
    215   };
    216 
    217   std::string favicon_params = "";
    218   InstantRestrictedID rid = 0;
    219   for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) {
    220     bool return_val = GetRestrictedIDFromFaviconUrl(
    221         test_cases[i].render_view_id,
    222         test_cases[i].transient_url,
    223         &favicon_params,
    224         &rid);
    225     EXPECT_EQ(test_cases[i].expected_return_val, return_val);
    226     EXPECT_EQ(test_cases[i].expected_favicon_params, favicon_params);
    227     EXPECT_EQ(test_cases[i].expected_rid, rid);
    228     favicon_params = "";
    229     rid = 0;
    230   }
    231 }
    232 
    233 }  // namespace internal
    234