Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4871)

Unified Diff: chrome/browser/extensions/api/tabs/tabs_api.cc

Issue 1015123003: Extension window.create API accepts state. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/api/tabs/tabs_api.cc
diff --git a/chrome/browser/extensions/api/tabs/tabs_api.cc b/chrome/browser/extensions/api/tabs/tabs_api.cc
index 229d89aaed2445c1b428504800768e261b4dedac..554fce4d82c09348466dac525feaec419821ffda 100644
--- a/chrome/browser/extensions/api/tabs/tabs_api.cc
+++ b/chrome/browser/extensions/api/tabs/tabs_api.cc
@@ -181,6 +181,60 @@ void AssignOptionalValue(const scoped_ptr<T>& source,
}
}
+ui::WindowShowState ConvertToWindowShowState(windows::State state) {
+ switch (state) {
+ case windows::STATE_NORMAL:
+ return ui::SHOW_STATE_NORMAL;
+ case windows::STATE_MINIMIZED:
+ return ui::SHOW_STATE_MINIMIZED;
+ case windows::STATE_MAXIMIZED:
+ return ui::SHOW_STATE_MAXIMIZED;
+ case windows::STATE_FULLSCREEN:
+ return ui::SHOW_STATE_FULLSCREEN;
+ case windows::STATE_NONE:
+ return ui::SHOW_STATE_DEFAULT;
+ default:
not at google - send to devlin 2015/03/19 15:43:45 No default case; have the NOTREACHED() outside the
limasdf 2015/03/19 17:40:13 Done.
+ NOTREACHED();
+ }
+ return ui::SHOW_STATE_DEFAULT;
+}
+
+bool IsValidStateForWindowCreateFunction(
+ const windows::Create::Params::CreateData* create_data) {
+ if (!create_data)
+ return true;
+
+ windows::State state = create_data->state;
+ if (create_data->focused) {
+ if (*create_data->focused) {
+ if (state == windows::STATE_MINIMIZED) {
+ return false;
+ }
+ } else {
+ if ((state == windows::STATE_MAXIMIZED ||
+ state == windows::STATE_FULLSCREEN)) {
+ return false;
+ }
+ }
+ }
+ bool has_bound = create_data->left || create_data->top ||
+ create_data->width || create_data->height;
+ if (has_bound &&
+ (state == windows::STATE_MINIMIZED || state == windows::STATE_MAXIMIZED ||
+ state == windows::STATE_FULLSCREEN)) {
+ return false;
+ }
+ bool is_panel =
+ create_data->type == windows::Create::Params::CreateData::TYPE_PANEL ||
+ create_data->type ==
+ windows::Create::Params::CreateData::TYPE_DETACHED_PANEL;
+ if (is_panel &&
+ (state == windows::STATE_MINIMIZED || state == windows::STATE_MAXIMIZED ||
+ state == windows::STATE_FULLSCREEN)) {
+ return false;
+ }
+ return true;
+}
} // namespace
void ZoomModeToZoomSettings(ZoomController::ZoomMode zoom_mode,
@@ -404,6 +458,11 @@ bool WindowsCreateFunction::RunSync() {
return false;
}
+ if (!IsValidStateForWindowCreateFunction(create_data)) {
+ error_ = keys::kInvalidWindowStateError;
+ return false;
+ }
+
Profile* window_profile = GetProfile();
Browser::Type window_type = Browser::TYPE_TABBED;
bool create_panel = false;
@@ -559,6 +618,10 @@ bool WindowsCreateFunction::RunSync() {
host_desktop_type);
}
create_params.initial_show_state = ui::SHOW_STATE_NORMAL;
+ if (create_data && create_data->state) {
+ create_params.initial_show_state =
+ ConvertToWindowShowState(create_data->state);
+ }
create_params.host_desktop_type = chrome::GetActiveDesktop();
Browser* new_window = new Browser(create_params);
@@ -595,6 +658,13 @@ bool WindowsCreateFunction::RunSync() {
if (!saw_focus_key && create_panel)
focused = false;
+ WindowController* controller = new_window->extension_window_controller();
+ if (create_params.initial_show_state == ui::SHOW_STATE_FULLSCREEN)
+ controller->SetFullscreenMode(true, extension()->url());
+
+ if (create_params.initial_show_state == ui::SHOW_STATE_MINIMIZED)
+ focused = false;
+
if (focused)
new_window->window()->Show();
else
@@ -606,9 +676,7 @@ bool WindowsCreateFunction::RunSync() {
// profile and CanCrossIncognito isn't allowed.
SetResult(base::Value::CreateNullValue());
} else {
- SetResult(
- new_window->extension_window_controller()->CreateWindowValueWithTabs(
- extension()));
+ SetResult(controller->CreateWindowValueWithTabs(extension()));
}
return true;
@@ -624,26 +692,8 @@ bool WindowsUpdateFunction::RunSync() {
&controller))
return false;
- ui::WindowShowState show_state = ui::SHOW_STATE_DEFAULT; // No change.
- switch (params->update_info.state) {
- case windows::Update::Params::UpdateInfo::STATE_NORMAL:
- show_state = ui::SHOW_STATE_NORMAL;
- break;
- case windows::Update::Params::UpdateInfo::STATE_MINIMIZED:
- show_state = ui::SHOW_STATE_MINIMIZED;
- break;
- case windows::Update::Params::UpdateInfo::STATE_MAXIMIZED:
- show_state = ui::SHOW_STATE_MAXIMIZED;
- break;
- case windows::Update::Params::UpdateInfo::STATE_FULLSCREEN:
- show_state = ui::SHOW_STATE_FULLSCREEN;
- break;
- case windows::Update::Params::UpdateInfo::STATE_NONE:
- break;
- default:
- error_ = keys::kInvalidWindowStateError;
- return false;
- }
+ ui::WindowShowState show_state =
+ ConvertToWindowShowState(params->update_info.state);
if (show_state != ui::SHOW_STATE_FULLSCREEN &&
show_state != ui::SHOW_STATE_DEFAULT)
« no previous file with comments | « chrome/browser/extensions/api/sessions/sessions_api.cc ('k') | chrome/browser/extensions/api/tabs/tabs_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698