OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/renderer/manifest/manifest_parser.h" | 5 #include "content/renderer/manifest/manifest_parser.h" |
6 | 6 |
7 #include "base/strings/string_util.h" | 7 #include "base/strings/string_util.h" |
8 #include "content/public/common/manifest.h" | 8 #include "content/public/common/manifest.h" |
9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
10 | 10 |
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
318 blink::WebScreenOrientationLockPortraitSecondary); | 318 blink::WebScreenOrientationLockPortraitSecondary); |
319 } | 319 } |
320 | 320 |
321 // Case insensitive. | 321 // Case insensitive. |
322 { | 322 { |
323 Manifest manifest = ParseManifest("{ \"orientation\": \"LANDSCAPE\" }"); | 323 Manifest manifest = ParseManifest("{ \"orientation\": \"LANDSCAPE\" }"); |
324 EXPECT_EQ(manifest.orientation, blink::WebScreenOrientationLockLandscape); | 324 EXPECT_EQ(manifest.orientation, blink::WebScreenOrientationLockLandscape); |
325 } | 325 } |
326 } | 326 } |
327 | 327 |
| 328 TEST_F(ManifestParserTest, IconsParseRules) { |
| 329 // Smoke test: if no icon, empty list. |
| 330 { |
| 331 Manifest manifest = ParseManifest("{ \"icons\": [] }"); |
| 332 EXPECT_EQ(manifest.icons.size(), 0u); |
| 333 EXPECT_TRUE(manifest.IsEmpty()); |
| 334 } |
| 335 |
| 336 // Smoke test: if empty icon, empty list. |
| 337 { |
| 338 Manifest manifest = ParseManifest("{ \"icons\": [ {} ] }"); |
| 339 EXPECT_EQ(manifest.icons.size(), 0u); |
| 340 EXPECT_TRUE(manifest.IsEmpty()); |
| 341 } |
| 342 |
| 343 // Smoke test: icon with invalid src, empty list. |
| 344 { |
| 345 Manifest manifest = ParseManifest("{ \"icons\": [ { \"icons\": [] } ] }"); |
| 346 EXPECT_EQ(manifest.icons.size(), 0u); |
| 347 EXPECT_TRUE(manifest.IsEmpty()); |
| 348 } |
| 349 |
| 350 // Smoke test: if icon with empty src, it will be present in the list. |
| 351 { |
| 352 Manifest manifest = ParseManifest("{ \"icons\": [ { \"src\": \"\" } ] }"); |
| 353 EXPECT_EQ(manifest.icons.size(), 1u); |
| 354 EXPECT_EQ(manifest.icons[0].src.spec(), "http://foo.com/index.html"); |
| 355 EXPECT_FALSE(manifest.IsEmpty()); |
| 356 } |
| 357 |
| 358 // Smoke test: if one icons with valid src, it will be present in the list. |
| 359 { |
| 360 Manifest manifest = |
| 361 ParseManifest("{ \"icons\": [{ \"src\": \"foo.jpg\" }] }"); |
| 362 EXPECT_EQ(manifest.icons.size(), 1u); |
| 363 EXPECT_EQ(manifest.icons[0].src.spec(), "http://foo.com/foo.jpg"); |
| 364 EXPECT_FALSE(manifest.IsEmpty()); |
| 365 } |
| 366 } |
| 367 |
| 368 TEST_F(ManifestParserTest, IconSrcParseRules) { |
| 369 // Smoke test. |
| 370 { |
| 371 Manifest manifest = |
| 372 ParseManifest("{ \"icons\": [ {\"src\": \"foo.png\" } ] }"); |
| 373 EXPECT_EQ(manifest.icons[0].src.spec(), |
| 374 default_document_url.Resolve("foo.png").spec()); |
| 375 } |
| 376 |
| 377 // Whitespaces. |
| 378 { |
| 379 Manifest manifest = |
| 380 ParseManifest("{ \"icons\": [ {\"src\": \" foo.png \" } ] }"); |
| 381 EXPECT_EQ(manifest.icons[0].src.spec(), |
| 382 default_document_url.Resolve("foo.png").spec()); |
| 383 } |
| 384 |
| 385 // Don't parse if property isn't a string. |
| 386 { |
| 387 Manifest manifest = ParseManifest("{ \"icons\": [ {\"src\": {} } ] }"); |
| 388 EXPECT_TRUE(manifest.icons.empty()); |
| 389 } |
| 390 |
| 391 // Don't parse if property isn't a string. |
| 392 { |
| 393 Manifest manifest = ParseManifest("{ \"icons\": [ {\"src\": 42 } ] }"); |
| 394 EXPECT_TRUE(manifest.icons.empty()); |
| 395 } |
| 396 |
| 397 // Resolving has to happen based on the document_url. |
| 398 { |
| 399 Manifest manifest = |
| 400 ParseManifest("{ \"icons\": [ {\"src\": \"icons/foo.png\" } ] }", |
| 401 GURL("http://foo.com/landing/index.html")); |
| 402 EXPECT_EQ(manifest.icons[0].src.spec(), |
| 403 "http://foo.com/landing/icons/foo.png"); |
| 404 } |
| 405 } |
| 406 |
| 407 TEST_F(ManifestParserTest, IconTypeParseRules) { |
| 408 // Smoke test. |
| 409 { |
| 410 Manifest manifest = |
| 411 ParseManifest("{ \"icons\": [ {\"src\": \"\", \"type\": \"foo\" } ] }"); |
| 412 EXPECT_TRUE(EqualsASCII(manifest.icons[0].type.string(), "foo")); |
| 413 } |
| 414 |
| 415 // Trim whitespaces. |
| 416 { |
| 417 Manifest manifest = ParseManifest("{ \"icons\": [ {\"src\": \"\"," |
| 418 " \"type\": \" foo \" } ] }"); |
| 419 EXPECT_TRUE(EqualsASCII(manifest.icons[0].type.string(), "foo")); |
| 420 } |
| 421 |
| 422 // Don't parse if property isn't a string. |
| 423 { |
| 424 Manifest manifest = |
| 425 ParseManifest("{ \"icons\": [ {\"src\": \"\", \"type\": {} } ] }"); |
| 426 EXPECT_TRUE(manifest.icons[0].type.is_null()); |
| 427 } |
| 428 |
| 429 // Don't parse if property isn't a string. |
| 430 { |
| 431 Manifest manifest = |
| 432 ParseManifest("{ \"icons\": [ {\"src\": \"\", \"type\": 42 } ] }"); |
| 433 EXPECT_TRUE(manifest.icons[0].type.is_null()); |
| 434 } |
| 435 } |
| 436 |
| 437 TEST_F(ManifestParserTest, IconDensityParseRules) { |
| 438 // Smoke test. |
| 439 { |
| 440 Manifest manifest = |
| 441 ParseManifest("{ \"icons\": [ {\"src\": \"\", \"density\": 42 } ] }"); |
| 442 EXPECT_EQ(manifest.icons[0].density, 42); |
| 443 } |
| 444 |
| 445 // Decimal value. |
| 446 { |
| 447 Manifest manifest = |
| 448 ParseManifest("{ \"icons\": [ {\"src\": \"\", \"density\": 2.5 } ] }"); |
| 449 EXPECT_EQ(manifest.icons[0].density, 2.5); |
| 450 } |
| 451 |
| 452 // Parse fail if it isn't a float. |
| 453 { |
| 454 Manifest manifest = |
| 455 ParseManifest("{ \"icons\": [ {\"src\": \"\", \"density\": {} } ] }"); |
| 456 EXPECT_EQ(manifest.icons[0].density, Manifest::Icon::kDefaultDensity); |
| 457 } |
| 458 |
| 459 // Parse fail if it isn't a float. |
| 460 { |
| 461 Manifest manifest = |
| 462 ParseManifest("{ \"icons\": [ {\"src\": \"\", \"density\":\"2\" } ] }"); |
| 463 EXPECT_EQ(manifest.icons[0].density, Manifest::Icon::kDefaultDensity); |
| 464 } |
| 465 |
| 466 // Edge case: 1.0. |
| 467 { |
| 468 Manifest manifest = |
| 469 ParseManifest("{ \"icons\": [ {\"src\": \"\", \"density\": 1.00 } ] }"); |
| 470 EXPECT_EQ(manifest.icons[0].density, 1); |
| 471 } |
| 472 |
| 473 // Edge case: values between 0.0 and 1.0 are allowed. |
| 474 { |
| 475 Manifest manifest = |
| 476 ParseManifest("{ \"icons\": [ {\"src\": \"\", \"density\": 0.42 } ] }"); |
| 477 EXPECT_EQ(manifest.icons[0].density, 0.42); |
| 478 } |
| 479 |
| 480 // 0 is an invalid value. |
| 481 { |
| 482 Manifest manifest = |
| 483 ParseManifest("{ \"icons\": [ {\"src\": \"\", \"density\": 0.0 } ] }"); |
| 484 EXPECT_EQ(manifest.icons[0].density, Manifest::Icon::kDefaultDensity); |
| 485 } |
| 486 |
| 487 // Negative values are invalid. |
| 488 { |
| 489 Manifest manifest = |
| 490 ParseManifest("{ \"icons\": [ {\"src\": \"\", \"density\": -2.5 } ] }"); |
| 491 EXPECT_EQ(manifest.icons[0].density, Manifest::Icon::kDefaultDensity); |
| 492 } |
| 493 } |
| 494 |
328 } // namespace content | 495 } // namespace content |
OLD | NEW |