172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <string> 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/command_line.h" 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/file_util.h" 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/test/test_file_util.h" 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/values.h" 11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_temp_dir.h" 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "build/build_config.h" 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/chrome_constants.h" 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/chrome_switches.h" 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/pref_names.h" 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/automation/browser_proxy.h" 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/automation/window_proxy.h" 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/ui/ui_test.h" 19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/json_value_serializer.h" 2072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/gfx/rect.h" 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass PreferenceServiceTest : public UITest { 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void SetUp() { 25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FilePath tmp_profile = temp_dir_.path().AppendASCII("tmp_profile"); 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_TRUE(file_util::CreateDirectory(tmp_profile)); 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 3072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen FilePath reference_pref_file; 3172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (new_profile_) { 3272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen reference_pref_file = test_data_directory_ 3372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen .AppendASCII("profiles") 3472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen .AppendASCII("window_placement") 3572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen .AppendASCII("Default") 3672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen .Append(chrome::kPreferencesFilename); 37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen tmp_pref_file_ = tmp_profile.AppendASCII("Default"); 3872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(file_util::CreateDirectory(tmp_pref_file_)); 3972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen tmp_pref_file_ = tmp_pref_file_.Append(chrome::kPreferencesFilename); 4072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } else { 4172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen reference_pref_file = test_data_directory_ 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .AppendASCII("profiles") 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .AppendASCII("window_placement") 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .Append(chrome::kLocalStateFilename); 45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen tmp_pref_file_ = tmp_profile.Append(chrome::kLocalStateFilename); 4672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(file_util::PathExists(reference_pref_file)); 4972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Copy only the Preferences file if |new_profile_|, or Local State if not, 5072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // and the rest will be automatically created. 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(file_util::CopyFile(reference_pref_file, tmp_pref_file_)); 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(OS_WIN) 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Make the copy writable. On POSIX we assume the umask allows files 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // we create to be writable. 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(::SetFileAttributesW(tmp_pref_file_.value().c_str(), 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FILE_ATTRIBUTE_NORMAL)); 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 60ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen launch_arguments_.AppendSwitchPath(switches::kUserDataDir, tmp_profile); 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool LaunchAppWithProfile() { 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!file_util::PathExists(tmp_pref_file_)) 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return false; 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch UITest::SetUp(); 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void TearDown() { 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch UITest::TearDown(); 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 7572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen bool new_profile_; 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath tmp_pref_file_; 77ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 78ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen private: 79ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ScopedTempDir temp_dir_; 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 8272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#if !defined(OS_LINUX) 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// This test verifies that the window position from the prefs file is restored 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// when the app restores. This doesn't really make sense on Linux, where 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// the window manager might fight with you over positioning. However, we 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// might be able to make this work on buildbots. 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// TODO(port): revisit this. 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(PreferenceServiceTest, PreservedWindowPlacementIsLoaded) { 8972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // The window should open with the new reference profile, with window 9072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // placement values stored in the user data directory. 9172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen new_profile_ = true; 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(LaunchAppWithProfile()); 93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(file_util::PathExists(tmp_pref_file_)); 95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch JSONFileValueSerializer deserializer(tmp_pref_file_); 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<Value> root(deserializer.Deserialize(NULL, NULL)); 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(root.get()); 100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(root->IsType(Value::TYPE_DICTIONARY)); 101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DictionaryValue* root_dict = static_cast<DictionaryValue*>(root.get()); 103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Retrieve the screen rect for the launched window 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<BrowserProxy> browser(automation()->GetBrowserWindow(0)); 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser.get()); 107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<WindowProxy> window(browser->GetWindow()); 108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(window.get()); 109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::Rect bounds; 111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(window->GetBounds(&bounds)); 112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Retrieve the expected rect values from "Preferences" 114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int bottom = 0; 1153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick std::string kBrowserWindowPlacement(prefs::kBrowserWindowPlacement); 1163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_TRUE(root_dict->GetInteger(kBrowserWindowPlacement + ".bottom", 117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch &bottom)); 118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(bottom, bounds.y() + bounds.height()); 119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int top = 0; 1213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_TRUE(root_dict->GetInteger(kBrowserWindowPlacement + ".top", 122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch &top)); 123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(top, bounds.y()); 124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int left = 0; 1263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_TRUE(root_dict->GetInteger(kBrowserWindowPlacement + ".left", 127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch &left)); 128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(left, bounds.x()); 129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int right = 0; 1313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_TRUE(root_dict->GetInteger(kBrowserWindowPlacement + ".right", 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch &right)); 133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(right, bounds.x() + bounds.width()); 134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Find if launched window is maximized. 136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool is_window_maximized = false; 137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(window->IsMaximized(&is_window_maximized)); 138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool is_maximized = false; 1393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_TRUE(root_dict->GetBoolean(kBrowserWindowPlacement + ".maximized", 140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch &is_maximized)); 141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(is_maximized, is_window_maximized); 142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 14472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 14572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#if !defined(OS_LINUX) 14672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTEST_F(PreferenceServiceTest, PreservedWindowPlacementIsMigrated) { 14772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // The window should open with the old reference profile, with window 14872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // placement values stored in Local State. 14972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen new_profile_ = false; 15072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(LaunchAppWithProfile()); 15172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 15272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(file_util::PathExists(tmp_pref_file_)); 15372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 15472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen JSONFileValueSerializer deserializer(tmp_pref_file_); 15572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_ptr<Value> root(deserializer.Deserialize(NULL, NULL)); 15672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 15772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(root.get()); 15872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(root->IsType(Value::TYPE_DICTIONARY)); 15972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 16072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Retrieve the screen rect for the launched window 16172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_refptr<BrowserProxy> browser(automation()->GetBrowserWindow(0)); 16272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(browser.get()); 16372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_refptr<WindowProxy> window(browser->GetWindow()); 16472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(window.get()); 16572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 16672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen gfx::Rect bounds; 16772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(window->GetBounds(&bounds)); 16872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 16972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Values from old reference profile in Local State should have been 17072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // correctly migrated to the user's Preferences -- if so, the window 17172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // should be set to values taken from the user's Local State. 17272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DictionaryValue* root_dict = static_cast<DictionaryValue*>(root.get()); 17372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 17472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Retrieve the expected rect values from User Preferences, where they 17572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // should have been migrated from Local State. 17672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen int bottom = 0; 17772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen std::string kBrowserWindowPlacement(prefs::kBrowserWindowPlacement); 17872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_TRUE(root_dict->GetInteger(kBrowserWindowPlacement + ".bottom", 17972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen &bottom)); 18072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ(bottom, bounds.y() + bounds.height()); 18172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 18272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen int top = 0; 18372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_TRUE(root_dict->GetInteger(kBrowserWindowPlacement + ".top", 18472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen &top)); 18572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ(top, bounds.y()); 18672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 18772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen int left = 0; 18872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_TRUE(root_dict->GetInteger(kBrowserWindowPlacement + ".left", 18972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen &left)); 19072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ(left, bounds.x()); 19172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 19272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen int right = 0; 19372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_TRUE(root_dict->GetInteger(kBrowserWindowPlacement + ".right", 19472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen &right)); 19572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ(right, bounds.x() + bounds.width()); 19672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 19772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Find if launched window is maximized. 19872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen bool is_window_maximized = false; 19972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(window->IsMaximized(&is_window_maximized)); 20072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen bool is_maximized = false; 20172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_TRUE(root_dict->GetBoolean(kBrowserWindowPlacement + ".maximized", 20272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen &is_maximized)); 20372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ(is_maximized, is_window_maximized); 20472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 20572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#endif 20672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 207