| Index: chrome/browser/extensions/shell_window_geometry_cache.cc
|
| diff --git a/chrome/browser/extensions/shell_window_geometry_cache.cc b/chrome/browser/extensions/shell_window_geometry_cache.cc
|
| index f08f085b89a0b59b98c1372b84893c672f674445..7d01f9c4395083ed1af0e611e4adc7a48f47c472 100644
|
| --- a/chrome/browser/extensions/shell_window_geometry_cache.cc
|
| +++ b/chrome/browser/extensions/shell_window_geometry_cache.cc
|
| @@ -40,18 +40,21 @@ ShellWindowGeometryCache::~ShellWindowGeometryCache() {
|
| void ShellWindowGeometryCache::SaveGeometry(
|
| const std::string& extension_id,
|
| const std::string& window_id,
|
| - const gfx::Rect& bounds) {
|
| + const gfx::Rect& bounds,
|
| + ui::WindowShowState window_state) {
|
| ExtensionData& extension_data = cache_[extension_id];
|
|
|
| // If we don't have any unsynced changes and this is a duplicate of what's
|
| // already in the cache, just ignore it.
|
| if (extension_data[window_id].bounds == bounds &&
|
| + extension_data[window_id].window_state == window_state &&
|
| !ContainsKey(unsynced_extensions_, extension_id))
|
| return;
|
|
|
| base::Time now = base::Time::Now();
|
|
|
| extension_data[window_id].bounds = bounds;
|
| + extension_data[window_id].window_state = window_state;
|
| extension_data[window_id].last_change = now;
|
|
|
| if (extension_data.size() > kMaxCachedWindows) {
|
| @@ -99,6 +102,7 @@ void ShellWindowGeometryCache::SyncToStorage() {
|
| value->SetInteger("y", bounds.y());
|
| value->SetInteger("w", bounds.width());
|
| value->SetInteger("h", bounds.height());
|
| + value->SetInteger("state", it->second.window_state);
|
| value->SetString(
|
| "ts", base::Int64ToString(it->second.last_change.ToInternalValue()));
|
| dict->SetWithoutPathExpansion(it->first, value);
|
| @@ -110,7 +114,8 @@ void ShellWindowGeometryCache::SyncToStorage() {
|
| bool ShellWindowGeometryCache::GetGeometry(
|
| const std::string& extension_id,
|
| const std::string& window_id,
|
| - gfx::Rect* bounds) const {
|
| + gfx::Rect* bounds,
|
| + ui::WindowShowState* window_state) const {
|
|
|
| std::map<std::string, ExtensionData>::const_iterator
|
| extension_data_it = cache_.find(extension_id);
|
| @@ -125,7 +130,10 @@ bool ShellWindowGeometryCache::GetGeometry(
|
| if (window_data == extension_data_it->second.end())
|
| return false;
|
|
|
| - *bounds = window_data->second.bounds;
|
| + if (bounds)
|
| + *bounds = window_data->second.bounds;
|
| + if (window_state)
|
| + *window_state = window_data->second.window_state;
|
| return true;
|
| }
|
|
|
| @@ -171,8 +179,7 @@ void ShellWindowGeometryCache::OnExtensionLoaded(
|
| // overwrite that information since it is probably the result of an
|
| // application starting up very quickly.
|
| const std::string& window_id = it.key();
|
| - ExtensionData::iterator cached_window =
|
| - extension_data.find(window_id);
|
| + ExtensionData::iterator cached_window = extension_data.find(window_id);
|
| if (cached_window == extension_data.end()) {
|
| const base::DictionaryValue* stored_window;
|
| if (it.value().GetAsDictionary(&stored_window)) {
|
| @@ -187,6 +194,10 @@ void ShellWindowGeometryCache::OnExtensionLoaded(
|
| window_data.bounds.set_width(i);
|
| if (stored_window->GetInteger("h", &i))
|
| window_data.bounds.set_height(i);
|
| + if (stored_window->GetInteger("state", &i)) {
|
| + window_data.window_state =
|
| + static_cast<ui::WindowShowState>(i);
|
| + }
|
| std::string ts_as_string;
|
| if (stored_window->GetString("ts", &ts_as_string)) {
|
| int64 ts;
|
|
|