diff options
author | scherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-06-22 18:45:59 +0000 |
---|---|---|
committer | scherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-06-22 18:45:59 +0000 |
commit | 970078f631430843b84c72352195c02580908636 (patch) | |
tree | d7fc2340236b1f4ab87335358c4976c01745cd37 | |
parent | d3cee19d4b6e16dd4ee1d42d8d4f888d944fe587 (diff) | |
download | chromium_src-970078f631430843b84c72352195c02580908636.zip chromium_src-970078f631430843b84c72352195c02580908636.tar.gz chromium_src-970078f631430843b84c72352195c02580908636.tar.bz2 |
Added app.launch.width and app.launch.height keys to app manifest.
This allows panels and window container types to specify initial dimensions when launching.
BUG=46501
TEST=add app.launch.width/height to an app manifest with container==panel/window
Review URL: http://codereview.chromium.org/2814016
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50489 0039d316-1c4b-4281-b951-d872f2087c98
12 files changed, 140 insertions, 0 deletions
diff --git a/chrome/browser/browser.cc b/chrome/browser/browser.cc index d3e481c..0935c25 100644 --- a/chrome/browser/browser.cc +++ b/chrome/browser/browser.cc @@ -312,7 +312,13 @@ Browser* Browser::CreateForApp(const std::wstring& app_name, Browser* browser = new Browser(type, profile); browser->app_name_ = app_name; browser->extension_app_ = extension; + + gfx::Rect initial_pos(extension->launch_width(), extension->launch_height()); + if (!initial_pos.IsEmpty()) + browser->set_override_bounds(initial_pos); + browser->CreateBrowserWindow(); + return browser; } diff --git a/chrome/common/extensions/extension.cc b/chrome/common/extensions/extension.cc index d2b3d3b..7118853 100644 --- a/chrome/common/extensions/extension.cc +++ b/chrome/common/extensions/extension.cc @@ -679,6 +679,34 @@ bool Extension::LoadLaunchContainer(const DictionaryValue* manifest, return false; } + // Validate the container width if present. + if (manifest->Get(keys::kLaunchWidth, &temp)) { + if (launch_container_ != LAUNCH_PANEL && + launch_container_ != LAUNCH_WINDOW) { + *error = errors::kInvalidLaunchWidthContainer; + return false; + } + if (!temp->GetAsInteger(&launch_width_) || launch_width_ < 0) { + launch_width_ = 0; + *error = errors::kInvalidLaunchWidth; + return false; + } + } + + // Validate container height if present. + if (manifest->Get(keys::kLaunchHeight, &temp)) { + if (launch_container_ != LAUNCH_PANEL && + launch_container_ != LAUNCH_WINDOW) { + *error = errors::kInvalidLaunchHeightContainer; + return false; + } + if (!temp->GetAsInteger(&launch_height_) || launch_height_ < 0) { + launch_height_ = 0; + *error = errors::kInvalidLaunchHeight; + return false; + } + } + return true; } @@ -702,6 +730,8 @@ Extension::Extension(const FilePath& path) is_app_(false), launch_container_(LAUNCH_TAB), launch_fullscreen_(false), + launch_width_(0), + launch_height_(0), background_page_ready_(false), being_upgraded_(false) { DCHECK(path.IsAbsolute()); diff --git a/chrome/common/extensions/extension.h b/chrome/common/extensions/extension.h index 107d014..a6a5e78 100644 --- a/chrome/common/extensions/extension.h +++ b/chrome/common/extensions/extension.h @@ -335,6 +335,8 @@ class Extension { const std::string& launch_web_url() const { return launch_web_url_; } LaunchContainer launch_container() const { return launch_container_; } bool launch_fullscreen() const { return launch_fullscreen_; } + int launch_width() const { return launch_width_; } + int launch_height() const { return launch_height_; } // Gets the fully resolved absolute launch URL. GURL GetFullLaunchURL() const; @@ -520,6 +522,11 @@ class Extension { // Launch full screen by default. bool launch_fullscreen_; + // The default size of the container when launching. Only respected for + // containers like panels and windows. + int launch_width_; + int launch_height_; + // Cached images for this extension. This maps from the relative_path of the // resource to the cached image. ImageCache image_cache_; diff --git a/chrome/common/extensions/extension_constants.cc b/chrome/common/extensions/extension_constants.cc index be58611..b854dfb 100644 --- a/chrome/common/extensions/extension_constants.cc +++ b/chrome/common/extensions/extension_constants.cc @@ -22,8 +22,10 @@ const wchar_t* kJs = L"js"; const wchar_t* kLaunch = L"app.launch"; const wchar_t* kLaunchContainer = L"app.launch.container"; const wchar_t* kLaunchFullscreen = L"app.launch.fullscreen"; +const wchar_t* kLaunchHeight = L"app.launch.height"; const wchar_t* kLaunchLocalPath = L"app.launch.local_path"; const wchar_t* kLaunchWebURL = L"app.launch.web_url"; +const wchar_t* kLaunchWidth = L"app.launch.width"; const wchar_t* kMatches = L"matches"; const wchar_t* kMinimumChromeVersion = L"minimum_chrome_version"; const wchar_t* kIncludeGlobs = L"include_globs"; @@ -116,10 +118,18 @@ const char* kInvalidLaunchContainer = "Invalid value for 'app.launch.container'."; const char* kInvalidLaunchFullscreen = "Invalid value for 'app.launch.fullscreen'."; +const char* kInvalidLaunchHeight = + "Invalid value for 'app.launch.height'."; +const char* kInvalidLaunchHeightContainer = + "Invalid container type for 'app.launch.height'."; const char* kInvalidLaunchLocalPath = "Invalid value for 'app.launch.local_path'."; const char* kInvalidLaunchWebURL = "Invalid value for 'app.launch.web_url'."; +const char* kInvalidLaunchWidth = + "Invalid value for 'app.launch.width'."; +const char* kInvalidLaunchWidthContainer = + "Invalid container type for 'app.launch.width'."; const char* kInvalidKey = "Value 'key' is missing or invalid."; const char* kInvalidManifest = diff --git a/chrome/common/extensions/extension_constants.h b/chrome/common/extensions/extension_constants.h index c515c72..510ccd7 100644 --- a/chrome/common/extensions/extension_constants.h +++ b/chrome/common/extensions/extension_constants.h @@ -25,7 +25,9 @@ namespace extension_manifest_keys { extern const wchar_t* kLaunch; extern const wchar_t* kLaunchContainer; extern const wchar_t* kLaunchFullscreen; + extern const wchar_t* kLaunchHeight; extern const wchar_t* kLaunchLocalPath; + extern const wchar_t* kLaunchWidth; extern const wchar_t* kLaunchWebURL; extern const wchar_t* kJs; extern const wchar_t* kMatches; @@ -101,8 +103,12 @@ namespace extension_manifest_errors { extern const char* kInvalidKey; extern const char* kInvalidLaunchContainer; extern const char* kInvalidLaunchFullscreen; + extern const char* kInvalidLaunchHeight; + extern const char* kInvalidLaunchHeightContainer; extern const char* kInvalidLaunchLocalPath; extern const char* kInvalidLaunchWebURL; + extern const char* kInvalidLaunchWidth; + extern const char* kInvalidLaunchWidthContainer; extern const char* kInvalidManifest; extern const char* kInvalidMatchCount; extern const char* kInvalidMatch; diff --git a/chrome/common/extensions/extension_manifests_unittest.cc b/chrome/common/extensions/extension_manifests_unittest.cc index cc0047e..21f38537 100644 --- a/chrome/common/extensions/extension_manifests_unittest.cc +++ b/chrome/common/extensions/extension_manifests_unittest.cc @@ -136,6 +136,12 @@ TEST_F(ManifestTest, AppLaunchContainer) { extension.reset(LoadAndExpectSuccess("launch_fullscreen.json")); EXPECT_EQ(true, extension->launch_fullscreen()); + extension.reset(LoadAndExpectSuccess("launch_width.json")); + EXPECT_EQ(640, extension->launch_width()); + + extension.reset(LoadAndExpectSuccess("launch_height.json")); + EXPECT_EQ(480, extension->launch_height()); + LoadAndExpectError("launch_container_invalid_type.json", errors::kInvalidLaunchContainer); LoadAndExpectError("launch_container_invalid_value.json", @@ -144,6 +150,14 @@ TEST_F(ManifestTest, AppLaunchContainer) { errors::kLaunchURLRequired); LoadAndExpectError("launch_fullscreen_invalid.json", errors::kInvalidLaunchFullscreen); + LoadAndExpectError("launch_width_invalid.json", + errors::kInvalidLaunchWidthContainer); + LoadAndExpectError("launch_width_negative.json", + errors::kInvalidLaunchWidth); + LoadAndExpectError("launch_height_invalid.json", + errors::kInvalidLaunchHeightContainer); + LoadAndExpectError("launch_height_negative.json", + errors::kInvalidLaunchHeight); } TEST_F(ManifestTest, AppLaunchURL) { diff --git a/chrome/test/data/extensions/manifest_tests/launch_height.json b/chrome/test/data/extensions/manifest_tests/launch_height.json new file mode 100644 index 0000000..dfcb067 --- /dev/null +++ b/chrome/test/data/extensions/manifest_tests/launch_height.json @@ -0,0 +1,11 @@ +{ + "name": "test", + "version": "1", + "app": { + "launch": { + "container": "window", + "height": 480, + "local_path": "bar.html" + } + } +} diff --git a/chrome/test/data/extensions/manifest_tests/launch_height_invalid.json b/chrome/test/data/extensions/manifest_tests/launch_height_invalid.json new file mode 100644 index 0000000..22edc773 --- /dev/null +++ b/chrome/test/data/extensions/manifest_tests/launch_height_invalid.json @@ -0,0 +1,11 @@ +{ + "name": "test", + "version": "1", + "app": { + "launch": { + "container": "tab", + "height": 480, + "local_path": "bar.html" + } + } +} diff --git a/chrome/test/data/extensions/manifest_tests/launch_height_negative.json b/chrome/test/data/extensions/manifest_tests/launch_height_negative.json new file mode 100644 index 0000000..ed70e19 --- /dev/null +++ b/chrome/test/data/extensions/manifest_tests/launch_height_negative.json @@ -0,0 +1,11 @@ +{ + "name": "test", + "version": "1", + "app": { + "launch": { + "container": "window", + "height": -1, + "local_path": "bar.html" + } + } +} diff --git a/chrome/test/data/extensions/manifest_tests/launch_width.json b/chrome/test/data/extensions/manifest_tests/launch_width.json new file mode 100644 index 0000000..994d162 --- /dev/null +++ b/chrome/test/data/extensions/manifest_tests/launch_width.json @@ -0,0 +1,11 @@ +{ + "name": "test", + "version": "1", + "app": { + "launch": { + "container": "window", + "width": 640, + "local_path": "bar.html" + } + } +} diff --git a/chrome/test/data/extensions/manifest_tests/launch_width_invalid.json b/chrome/test/data/extensions/manifest_tests/launch_width_invalid.json new file mode 100644 index 0000000..b886de4 --- /dev/null +++ b/chrome/test/data/extensions/manifest_tests/launch_width_invalid.json @@ -0,0 +1,12 @@ +{ + "name": "test", + "version": "1", + "app": { + "launch": { + "container": "tab", + "width": 640, + "local_path": "bar.html" + } + } +} + diff --git a/chrome/test/data/extensions/manifest_tests/launch_width_negative.json b/chrome/test/data/extensions/manifest_tests/launch_width_negative.json new file mode 100644 index 0000000..e606871 --- /dev/null +++ b/chrome/test/data/extensions/manifest_tests/launch_width_negative.json @@ -0,0 +1,11 @@ +{ + "name": "test", + "version": "1", + "app": { + "launch": { + "container": "window", + "width": -1, + "local_path": "bar.html" + } + } +} |