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 "base/command_line.h"
6#include "chrome/common/chrome_switches.h"
7#include "chrome/common/extensions/manifest_handlers/app_launch_info.h"
8#include "chrome/common/extensions/manifest_tests/chrome_manifest_test.h"
9#include "extensions/common/error_utils.h"
10#include "extensions/common/extension.h"
11#include "extensions/common/manifest_constants.h"
12#include "testing/gtest/include/gtest/gtest.h"
13
14namespace extensions {
15
16namespace errors = manifest_errors;
17namespace keys = manifest_keys;
18
19class AppLaunchManifestTest : public ChromeManifestTest {
20};
21
22TEST_F(AppLaunchManifestTest, AppLaunchContainer) {
23  scoped_refptr<Extension> extension;
24
25  extension = LoadAndExpectSuccess("launch_tab.json");
26  EXPECT_EQ(LAUNCH_CONTAINER_TAB,
27            AppLaunchInfo::GetLaunchContainer(extension.get()));
28
29  extension = LoadAndExpectSuccess("launch_panel.json");
30  EXPECT_EQ(LAUNCH_CONTAINER_PANEL,
31            AppLaunchInfo::GetLaunchContainer(extension.get()));
32
33  extension = LoadAndExpectSuccess("launch_default.json");
34  EXPECT_EQ(LAUNCH_CONTAINER_TAB,
35            AppLaunchInfo::GetLaunchContainer(extension.get()));
36
37  extension = LoadAndExpectSuccess("launch_width.json");
38  EXPECT_EQ(640, AppLaunchInfo::GetLaunchWidth(extension.get()));
39
40  extension = LoadAndExpectSuccess("launch_height.json");
41  EXPECT_EQ(480, AppLaunchInfo::GetLaunchHeight(extension.get()));
42
43  Testcase testcases[] = {
44    Testcase("launch_window.json", errors::kInvalidLaunchContainer),
45    Testcase("launch_container_invalid_type.json",
46             errors::kInvalidLaunchContainer),
47    Testcase("launch_container_invalid_value.json",
48             errors::kInvalidLaunchContainer),
49    Testcase("launch_container_without_launch_url.json",
50             errors::kLaunchURLRequired),
51    Testcase("launch_width_invalid.json",
52             ErrorUtils::FormatErrorMessage(
53                 errors::kInvalidLaunchValueContainer,
54                 keys::kLaunchWidth)),
55    Testcase("launch_width_negative.json",
56             ErrorUtils::FormatErrorMessage(
57                 errors::kInvalidLaunchValue,
58                 keys::kLaunchWidth)),
59    Testcase("launch_height_invalid.json",
60             ErrorUtils::FormatErrorMessage(
61                 errors::kInvalidLaunchValueContainer,
62                 keys::kLaunchHeight)),
63    Testcase("launch_height_negative.json",
64             ErrorUtils::FormatErrorMessage(
65                 errors::kInvalidLaunchValue,
66                 keys::kLaunchHeight))
67  };
68  RunTestcases(testcases, arraysize(testcases),
69      EXPECT_TYPE_ERROR);
70}
71
72TEST_F(AppLaunchManifestTest, AppLaunchURL) {
73  Testcase testcases[] = {
74    Testcase("launch_path_and_url.json",
75             errors::kLaunchPathAndURLAreExclusive),
76    Testcase("launch_path_and_extent.json",
77             errors::kLaunchPathAndExtentAreExclusive),
78    Testcase("launch_path_invalid_type.json",
79             ErrorUtils::FormatErrorMessage(
80                 errors::kInvalidLaunchValue,
81                 keys::kLaunchLocalPath)),
82    Testcase("launch_path_invalid_value.json",
83             ErrorUtils::FormatErrorMessage(
84                 errors::kInvalidLaunchValue,
85                 keys::kLaunchLocalPath)),
86    Testcase("launch_path_invalid_localized.json",
87             ErrorUtils::FormatErrorMessage(
88                 errors::kInvalidLaunchValue,
89                 keys::kLaunchLocalPath)),
90    Testcase("launch_url_invalid_type_1.json",
91             ErrorUtils::FormatErrorMessage(
92                 errors::kInvalidLaunchValue,
93                 keys::kLaunchWebURL)),
94    Testcase("launch_url_invalid_type_2.json",
95             ErrorUtils::FormatErrorMessage(
96                 errors::kInvalidLaunchValue,
97                 keys::kLaunchWebURL)),
98    Testcase("launch_url_invalid_type_3.json",
99             ErrorUtils::FormatErrorMessage(
100                 errors::kInvalidLaunchValue,
101                 keys::kLaunchWebURL)),
102    Testcase("launch_url_invalid_localized.json",
103             ErrorUtils::FormatErrorMessage(
104                 errors::kInvalidLaunchValue,
105                 keys::kLaunchWebURL))
106  };
107  RunTestcases(testcases, arraysize(testcases),
108      EXPECT_TYPE_ERROR);
109
110  scoped_refptr<Extension> extension;
111  extension = LoadAndExpectSuccess("launch_local_path.json");
112  EXPECT_EQ(extension->url().spec() + "launch.html",
113            AppLaunchInfo::GetFullLaunchURL(extension.get()).spec());
114
115  extension = LoadAndExpectSuccess("launch_local_path_localized.json");
116  EXPECT_EQ(extension->url().spec() + "launch.html",
117            AppLaunchInfo::GetFullLaunchURL(extension.get()).spec());
118
119  LoadAndExpectError("launch_web_url_relative.json",
120                     ErrorUtils::FormatErrorMessage(
121                         errors::kInvalidLaunchValue,
122                         keys::kLaunchWebURL));
123
124  extension = LoadAndExpectSuccess("launch_web_url_absolute.json");
125  EXPECT_EQ(GURL("http://www.google.com/launch.html"),
126            AppLaunchInfo::GetFullLaunchURL(extension.get()));
127  extension = LoadAndExpectSuccess("launch_web_url_localized.json");
128  EXPECT_EQ(GURL("http://www.google.com/launch.html"),
129            AppLaunchInfo::GetFullLaunchURL(extension.get()));
130}
131
132}  // namespace extensions
133