Index: chrome/browser/extensions/extension_tabs_module.cc |
diff --git a/chrome/browser/extensions/extension_tabs_module.cc b/chrome/browser/extensions/extension_tabs_module.cc |
index f493f1b2c7f221d160f2f0164c7485666b2ebe87..4d4bd7d084346fe9fc68f65ab57182952101a7da 100644 |
--- a/chrome/browser/extensions/extension_tabs_module.cc |
+++ b/chrome/browser/extensions/extension_tabs_module.cc |
@@ -470,7 +470,7 @@ bool CreateWindowFunction::RunImpl() { |
} |
extension_id = GetExtension()->id(); |
} else if (type_str != keys::kWindowTypeValueNormal) { |
- EXTENSION_FUNCTION_VALIDATE(false); |
+ EXTENSION_FUNCTION_ERROR(keys::kInvalidWindowTypeError); |
} |
} |
} |
@@ -530,8 +530,38 @@ bool UpdateWindowFunction::RunImpl() { |
return false; |
} |
+ ui::WindowShowState show_state = ui::SHOW_STATE_DEFAULT; // No change. |
+ std::string state_str; |
+ if (update_props->HasKey(keys::kShowStateKey)) { |
+ EXTENSION_FUNCTION_VALIDATE(update_props->GetString(keys::kShowStateKey, |
+ &state_str)); |
+ if (state_str == keys::kShowStateValueNormal) |
+ show_state = ui::SHOW_STATE_NORMAL; |
+ else if (state_str == keys::kShowStateValueMinimized) |
+ show_state = ui::SHOW_STATE_MINIMIZED; |
+ else if (state_str == keys::kShowStateValueMaximized) |
+ show_state = ui::SHOW_STATE_MAXIMIZED; |
+ else |
+ EXTENSION_FUNCTION_ERROR(keys::kInvalidWindowStateError); |
+ } |
+ |
+ switch (show_state) { |
+ case ui::SHOW_STATE_MINIMIZED: |
+ browser->window()->Minimize(); |
+ break; |
+ case ui::SHOW_STATE_MAXIMIZED: |
+ browser->window()->Maximize(); |
+ break; |
+ case ui::SHOW_STATE_NORMAL: |
+ browser->window()->Restore(); |
+ break; |
+ default: |
+ break; |
+ } |
+ |
gfx::Rect bounds = browser->window()->GetRestoredBounds(); |
bool set_bounds = false; |
+ |
// Any part of the bounds can optionally be set by the caller. |
int bounds_val; |
if (update_props->HasKey(keys::kLeftKey)) { |
@@ -565,17 +595,30 @@ bool UpdateWindowFunction::RunImpl() { |
bounds.set_height(bounds_val); |
set_bounds = true; |
} |
- if (set_bounds) |
- browser->window()->SetBounds(bounds); |
+ |
+ if (set_bounds) { |
+ if (show_state == ui::SHOW_STATE_MINIMIZED || |
+ show_state == ui::SHOW_STATE_MAXIMIZED) |
+ EXTENSION_FUNCTION_ERROR(keys::kInvalidWindowStateError); |
+ else |
+ browser->window()->SetBounds(bounds); |
+ } |
bool active_val = false; |
if (update_props->HasKey(keys::kFocusedKey)) { |
EXTENSION_FUNCTION_VALIDATE(update_props->GetBoolean( |
keys::kFocusedKey, &active_val)); |
- if (active_val) |
- browser->window()->Activate(); |
- else |
- browser->window()->Deactivate(); |
+ if (active_val) { |
+ if (show_state == ui::SHOW_STATE_MINIMIZED) |
+ EXTENSION_FUNCTION_ERROR(keys::kInvalidWindowStateError); |
+ else |
+ browser->window()->Activate(); |
+ } else { |
+ if (show_state == ui::SHOW_STATE_MAXIMIZED) |
+ EXTENSION_FUNCTION_ERROR(keys::kInvalidWindowStateError); |
asargent_no_longer_on_chrome
2011/11/21 19:04:05
nit: EXTENSION_FUNCTION_ERROR sets bad_message_ =
|
+ else |
+ browser->window()->Deactivate(); |
+ } |
} |
bool draw_attention = false; |