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