summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
Diffstat (limited to 'chrome')
-rw-r--r--chrome/app/generated_resources.grd3
-rw-r--r--chrome/browser/browser_main.cc2
-rw-r--r--chrome/browser/chromeos/login_manager_view.cc131
-rw-r--r--chrome/browser/chromeos/login_manager_view.h22
-rw-r--r--chrome/browser/chromeos/login_wizard_view.cc156
-rw-r--r--chrome/browser/chromeos/login_wizard_view.h49
-rw-r--r--chrome/browser/views/browser_dialogs.h4
-rwxr-xr-xchrome/chrome_browser.gypi2
8 files changed, 255 insertions, 114 deletions
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index b9acb02..58f2c95 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -6744,6 +6744,9 @@ Keep your key file in a safe place. You will need it to create new versions of y
<message name="IDS_LOGIN_DISABLED_NO_LIBCROS" desc="On the login screen, the text we put on the screen in the event that we cannot load the Chromium OS shared library and must therefore disable login.">
libcros.so cannot be loaded. Login disabled.
</message>
+ <message name="IDS_LOGIN_TITLE">
+ Sign in with your Google Account
+ </message>
<message name="IDS_OPTIONS_SETTINGS_SECTION_TITLE_DATETIME">
Date and Time
</message>
diff --git a/chrome/browser/browser_main.cc b/chrome/browser/browser_main.cc
index 5a1f984..42d2c14 100644
--- a/chrome/browser/browser_main.cc
+++ b/chrome/browser/browser_main.cc
@@ -576,7 +576,7 @@ int BrowserMain(const MainFunctionParams& parameters) {
#if defined(OS_CHROMEOS)
if (parsed_command_line.HasSwitch(switches::kLoginManager)) {
- browser::ShowLoginManager();
+ browser::ShowLoginWizard();
}
#endif // OS_CHROMEOS
diff --git a/chrome/browser/chromeos/login_manager_view.cc b/chrome/browser/chromeos/login_manager_view.cc
index 4d6a76c..d19e92a 100644
--- a/chrome/browser/chromeos/login_manager_view.cc
+++ b/chrome/browser/chromeos/login_manager_view.cc
@@ -4,7 +4,6 @@
#include "chrome/browser/chromeos/login_manager_view.h"
-#include <gdk/gdk.h>
#include <signal.h>
#include <sys/types.h>
@@ -33,107 +32,34 @@ using views::Textfield;
using views::View;
using views::Widget;
-const int kUsernameY = 386;
+const int kTitleY = 50;
const int kPanelSpacing = 36;
const int kVersionPad = 4;
const int kTextfieldWidth = 286;
const SkColor kVersionColor = 0xFF7691DA;
const SkColor kErrorColor = 0xFF8F384F;
+const SkColor kBackground = SK_ColorWHITE;
const char *kDefaultDomain = "@gmail.com";
-// There's a GdkBlankCursor defined in a later version of gdk.
-// The version in cros is late enough to support it.
-#define BlankCursor static_cast<GdkCursorType>(-2)
-
-namespace browser {
-
-// Acts as a frame view with no UI.
-class LoginManagerNonClientFrameView : public views::NonClientFrameView {
- public:
- explicit LoginManagerNonClientFrameView() : views::NonClientFrameView() {}
-
- // Returns just the bounds of the window.
- virtual gfx::Rect GetBoundsForClientView() const { return bounds(); }
-
- // Doesn't add any size to the client bounds.
- virtual gfx::Rect GetWindowBoundsForClientBounds(
- const gfx::Rect& client_bounds) const {
- return client_bounds;
- }
-
- // There is no system menu.
- virtual gfx::Point GetSystemMenuPoint() const { return gfx::Point(); }
- // There is no non client area.
- virtual int NonClientHitTest(const gfx::Point& point) { return 0; }
-
- // There is no non client area.
- virtual void GetWindowMask(const gfx::Size& size,
- gfx::Path* window_mask) {}
- virtual void EnableClose(bool enable) {}
- virtual void ResetWindowControls() {}
-
- DISALLOW_COPY_AND_ASSIGN(LoginManagerNonClientFrameView);
-};
-
-// Subclass of WindowGtk, for use as the top level login window.
-class LoginManagerWindow : public views::WindowGtk {
- public:
- static LoginManagerWindow* CreateLoginManagerWindow() {
- LoginManagerWindow* login_manager_window =
- new LoginManagerWindow();
- login_manager_window->GetNonClientView()->SetFrameView(
- new LoginManagerNonClientFrameView());
- login_manager_window->Init(NULL, gfx::Rect());
-
- // This keeps the window from flashing at startup.
- GdkWindow* gdk_window =
- GTK_WIDGET(login_manager_window->GetNativeWindow())->window;
- gdk_window_set_back_pixmap(gdk_window, NULL, false);
- // Hide the cursor initially.
- gdk_window_set_cursor(gdk_window, gdk_cursor_new(BlankCursor));
- return login_manager_window;
- }
-
- private:
- LoginManagerWindow() : views::WindowGtk(new LoginManagerView) {
- }
-
- DISALLOW_COPY_AND_ASSIGN(LoginManagerWindow);
-};
-
-// Declared in browser_dialogs.h so that others don't need to depend on our .h.
-void ShowLoginManager() {
- // if we can't load the library, we'll tell the user in LoginManagerView.
- views::WindowGtk* window =
- LoginManagerWindow::CreateLoginManagerWindow();
- window->Show();
- if (chromeos::LoginLibrary::EnsureLoaded())
- chromeos::LoginLibrary::Get()->EmitLoginPromptReady();
- bool old_state = MessageLoop::current()->NestableTasksAllowed();
- MessageLoop::current()->SetNestableTasksAllowed(true);
- MessageLoop::current()->Run();
- MessageLoop::current()->SetNestableTasksAllowed(old_state);
-}
-} // namespace browser
-
-LoginManagerView::LoginManagerView() {
+LoginManagerView::LoginManagerView(int width, int height) {
+ dialog_dimensions_.SetSize(width, height);
Init();
}
LoginManagerView::~LoginManagerView() {
- MessageLoop::current()->Quit();
}
void LoginManagerView::Init() {
username_field_ = new views::Textfield;
- username_field_->RemoveBorder();
password_field_ = new views::Textfield(views::Textfield::STYLE_PASSWORD);
- password_field_->RemoveBorder();
os_version_label_ = new views::Label();
os_version_label_->SetColor(kVersionColor);
os_version_label_->SetHorizontalAlignment(views::Label::ALIGN_LEFT);
+ title_label_ = new views::Label();
+ title_label_->SetText(l10n_util::GetString(IDS_LOGIN_TITLE));
+
error_label_ = new views::Label();
error_label_->SetColor(kErrorColor);
error_label_->SetHorizontalAlignment(views::Label::ALIGN_LEFT);
@@ -155,26 +81,21 @@ gfx::Size LoginManagerView::GetPreferredSize() {
}
void LoginManagerView::BuildWindow() {
- ResourceBundle& rb = ResourceBundle::GetSharedInstance();
- panel_pixbuf_ = rb.GetPixbufNamed(IDR_LOGIN_PANEL);
- background_pixbuf_ = rb.GetPixbufNamed(IDR_LOGIN_BACKGROUND);
-
- // --------------------- Get attributes of images -----------------------
- dialog_dimensions_.SetSize(gdk_pixbuf_get_width(background_pixbuf_),
- gdk_pixbuf_get_height(background_pixbuf_));
-
- int panel_height = gdk_pixbuf_get_height(panel_pixbuf_);
- int panel_width = gdk_pixbuf_get_width(panel_pixbuf_);
-
- // ---------------------- Set up root View ------------------------------
- set_background(new views::ImageBackground(background_pixbuf_));
-
View* login_prompt = new View();
- login_prompt->set_background(new views::ImageBackground(panel_pixbuf_));
- login_prompt->SetBounds(0, 0, panel_width, panel_height);
-
- int x = (panel_width - kTextfieldWidth) / 2;
- int y = kUsernameY;
+ login_prompt->set_background(
+ views::Background::CreateSolidBackground(kBackground));
+ login_prompt->SetBounds(0,
+ 0,
+ dialog_dimensions_.width(),
+ dialog_dimensions_.height());
+
+ int x = (dialog_dimensions_.width() - kTextfieldWidth) / 2;
+ int y = kTitleY;
+ title_label_->SetBounds(x,
+ y,
+ kTextfieldWidth,
+ title_label_->GetPreferredSize().height());
+ y += kPanelSpacing;
username_field_->SetBounds(x, y, kTextfieldWidth, kPanelSpacing);
y += 2 * kPanelSpacing;
password_field_->SetBounds(x, y, kTextfieldWidth, kPanelSpacing);
@@ -182,15 +103,16 @@ void LoginManagerView::BuildWindow() {
os_version_label_->SetBounds(
x,
y,
- panel_width - (x + kVersionPad),
+ dialog_dimensions_.width() - (x + kVersionPad),
os_version_label_->GetPreferredSize().height());
y += kPanelSpacing;
error_label_->SetBounds(
x,
y,
- panel_width - (x + kVersionPad),
+ dialog_dimensions_.width() - (x + kVersionPad),
error_label_->GetPreferredSize().height());
+ login_prompt->AddChildView(title_label_);
login_prompt->AddChildView(username_field_);
login_prompt->AddChildView(password_field_);
login_prompt->AddChildView(os_version_label_);
@@ -228,8 +150,8 @@ bool LoginManagerView::Authenticate(const std::string& username,
}
void LoginManagerView::SetupSession(const std::string& username) {
- if (window()) {
- window()->Close();
+ if (observer_) {
+ observer_->OnLogin();
}
if (username.find("@google.com") != std::string::npos) {
// This isn't thread-safe. However, the login window is specifically
@@ -240,6 +162,7 @@ void LoginManagerView::SetupSession(const std::string& username) {
}
if (chromeos::LoginLibrary::EnsureLoaded())
chromeos::LoginLibrary::Get()->StartSession(username, "");
+
}
bool LoginManagerView::HandleKeystroke(views::Textfield* s,
diff --git a/chrome/browser/chromeos/login_manager_view.h b/chrome/browser/chromeos/login_manager_view.h
index 03b2c6f..c74eb53 100644
--- a/chrome/browser/chromeos/login_manager_view.h
+++ b/chrome/browser/chromeos/login_manager_view.h
@@ -15,13 +15,18 @@
#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_MANAGER_VIEW_H_
#define CHROME_BROWSER_CHROMEOS_LOGIN_MANAGER_VIEW_H_
-class FilePath;
-
class LoginManagerView : public views::View,
public views::WindowDelegate,
public views::Textfield::Controller {
public:
- LoginManagerView();
+ // Observer for login related events.
+ class LoginObserver {
+ public:
+ virtual ~LoginObserver() {}
+ virtual void OnLogin() = 0;
+ };
+
+ LoginManagerView(int width, int height);
virtual ~LoginManagerView();
// Initialize the controls on the dialog.
@@ -33,7 +38,6 @@ class LoginManagerView : public views::View,
// Overridden from views::WindowDelegate:
virtual views::View* GetContentsView();
-
// Overridden from views::Textfield::Controller
// Not thread-safe, by virtue of using SetupSession().
virtual bool HandleKeystroke(views::Textfield* sender,
@@ -42,25 +46,29 @@ class LoginManagerView : public views::View,
virtual void ContentsChanged(views::Textfield* sender,
const string16& new_contents) {}
+ void set_observer(LoginObserver* observer) {
+ observer_ = observer;
+ }
+
// Creates all examples and start UI event loop.
private:
views::Textfield* username_field_;
views::Textfield* password_field_;
views::Label* os_version_label_;
+ views::Label* title_label_;
views::Label* error_label_;
// The dialog dimensions.
gfx::Size dialog_dimensions_;
- GdkPixbuf* background_pixbuf_;
- GdkPixbuf* panel_pixbuf_;
-
// Handles asynchronously loading the version.
chromeos::VersionLoader loader_;
// Used to request the version.
CancelableRequestConsumer consumer_;
+ LoginObserver* observer_;
+
// Helper functions to modularize class
void BuildWindow();
diff --git a/chrome/browser/chromeos/login_wizard_view.cc b/chrome/browser/chromeos/login_wizard_view.cc
new file mode 100644
index 0000000..295f7e5
--- /dev/null
+++ b/chrome/browser/chromeos/login_wizard_view.cc
@@ -0,0 +1,156 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/chromeos/login_wizard_view.h"
+
+#include <gdk/gdk.h>
+#include <signal.h>
+#include <sys/types.h>
+
+#include "app/l10n_util.h"
+#include "app/resource_bundle.h"
+#include "base/file_path.h"
+#include "base/logging.h"
+#include "base/process_util.h"
+#include "chrome/browser/chromeos/image_background.h"
+#include "chrome/browser/chromeos/login_library.h"
+#include "chrome/browser/views/browser_dialogs.h"
+#include "grit/generated_resources.h"
+#include "grit/theme_resources.h"
+#include "views/window/non_client_view.h"
+#include "views/window/window.h"
+#include "views/window/window_gtk.h"
+
+using views::Background;
+using views::View;
+using views::Widget;
+
+// There's a GdkBlankCursor defined in a later version of gdk.
+// The version in cros is late enough to support it.
+#define BlankCursor static_cast<GdkCursorType>(-2)
+
+namespace browser {
+
+// Acts as a frame view with no UI.
+class LoginWizardNonClientFrameView : public views::NonClientFrameView {
+ public:
+ explicit LoginWizardNonClientFrameView() : views::NonClientFrameView() {}
+
+ // Returns just the bounds of the window.
+ virtual gfx::Rect GetBoundsForClientView() const { return bounds(); }
+
+ // Doesn't add any size to the client bounds.
+ virtual gfx::Rect GetWindowBoundsForClientBounds(
+ const gfx::Rect& client_bounds) const {
+ return client_bounds;
+ }
+
+ // There is no system menu.
+ virtual gfx::Point GetSystemMenuPoint() const { return gfx::Point(); }
+ // There is no non client area.
+ virtual int NonClientHitTest(const gfx::Point& point) { return 0; }
+
+ // There is no non client area.
+ virtual void GetWindowMask(const gfx::Size& size,
+ gfx::Path* window_mask) {}
+ virtual void EnableClose(bool enable) {}
+ virtual void ResetWindowControls() {}
+
+ DISALLOW_COPY_AND_ASSIGN(LoginWizardNonClientFrameView);
+};
+
+// Subclass of WindowGtk, for use as the top level login window.
+class LoginWizardWindow : public views::WindowGtk {
+ public:
+ static LoginWizardWindow* CreateLoginWizardWindow() {
+ LoginWizardWindow* login_wizard_window =
+ new LoginWizardWindow();
+ login_wizard_window->GetNonClientView()->SetFrameView(
+ new LoginWizardNonClientFrameView());
+ login_wizard_window->Init(NULL, gfx::Rect());
+
+ // This keeps the window from flashing at startup.
+ GdkWindow* gdk_window =
+ GTK_WIDGET(login_wizard_window->GetNativeWindow())->window;
+ gdk_window_set_back_pixmap(gdk_window, NULL, false);
+ // Hide the cursor initially.
+ // TODO(nkostylev): Fix cursor setting.
+ //gdk_window_set_cursor(gdk_window, gdk_cursor_new(BlankCursor));
+ return login_wizard_window;
+ }
+
+ private:
+ LoginWizardWindow() : views::WindowGtk(new LoginWizardView) {
+ }
+
+ DISALLOW_COPY_AND_ASSIGN(LoginWizardWindow);
+};
+
+// Declared in browser_dialogs.h so that others don't need to depend on our .h.
+void ShowLoginWizard() {
+ views::WindowGtk* window =
+ LoginWizardWindow::CreateLoginWizardWindow();
+ window->Show();
+ if (chromeos::LoginLibrary::EnsureLoaded()) {
+ chromeos::LoginLibrary::Get()->EmitLoginPromptReady();
+ }
+ bool old_state = MessageLoop::current()->NestableTasksAllowed();
+ MessageLoop::current()->SetNestableTasksAllowed(true);
+ MessageLoop::current()->Run();
+ MessageLoop::current()->SetNestableTasksAllowed(old_state);
+}
+
+} // namespace browser
+
+LoginWizardView::LoginWizardView() {
+ Init();
+}
+
+LoginWizardView::~LoginWizardView() {
+ MessageLoop::current()->Quit();
+}
+
+void LoginWizardView::Init() {
+ InitWizardWindow();
+ // TODO(nkostylev): Select initial wizard view based on OOBE switch.
+ InitLoginWindow();
+}
+
+gfx::Size LoginWizardView::GetPreferredSize() {
+ return dimensions_;
+}
+
+void LoginWizardView::OnLogin() {
+ if (window()) {
+ window()->Close();
+ }
+}
+
+void LoginWizardView::InitLoginWindow() {
+ int login_width = dimensions_.width() / 2;
+ int login_height = dimensions_.height() / 2;
+ LoginManagerView* login_view = new LoginManagerView(login_width,
+ login_height);
+ login_view->set_observer(this);
+ login_view->SetBounds(dimensions_.width() / 4,
+ dimensions_.height() / 4,
+ login_width,
+ login_height);
+ AddChildView(login_view);
+}
+
+void LoginWizardView::InitWizardWindow() {
+ ResourceBundle& rb = ResourceBundle::GetSharedInstance();
+ background_pixbuf_ = rb.GetPixbufNamed(IDR_LOGIN_BACKGROUND);
+ int width = gdk_pixbuf_get_width(background_pixbuf_);
+ int height = gdk_pixbuf_get_height(background_pixbuf_);
+ dimensions_.SetSize(width, height);
+ set_background(new views::ImageBackground(background_pixbuf_));
+ // TODO(nkostylev): Add status bar (language, network, battery, clock).
+}
+
+views::View* LoginWizardView::GetContentsView() {
+ return this;
+}
+
diff --git a/chrome/browser/chromeos/login_wizard_view.h b/chrome/browser/chromeos/login_wizard_view.h
new file mode 100644
index 0000000..f0f28e6
--- /dev/null
+++ b/chrome/browser/chromeos/login_wizard_view.h
@@ -0,0 +1,49 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "app/gfx/canvas.h"
+#include "chrome/browser/chromeos/login_manager_view.h"
+#include "views/view.h"
+#include "views/window/window_delegate.h"
+
+#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_WIZARD_VIEW_H_
+#define CHROME_BROWSER_CHROMEOS_LOGIN_WIZARD_VIEW_H_
+
+// View for the wizard that will launch OOBE steps or login screen.
+class LoginWizardView : public views::View,
+ public views::WindowDelegate,
+ public LoginManagerView::LoginObserver {
+ public:
+ LoginWizardView();
+ virtual ~LoginWizardView();
+
+ // Initializes wizard windows and controls (status bar).
+ void Init();
+
+ // Overridden from views::View:
+ virtual gfx::Size GetPreferredSize();
+
+ // Overridden from views::WindowDelegate:
+ virtual views::View* GetContentsView();
+
+ // LoginObserver notification.
+ virtual void OnLogin();
+
+ private:
+ // Creates login window.
+ void InitLoginWindow();
+
+ // Creates main wizard window with status bar.
+ void InitWizardWindow();
+
+ // Background for the wizard view.
+ GdkPixbuf* background_pixbuf_;
+
+ // Wizard view dimensions.
+ gfx::Size dimensions_;
+
+ DISALLOW_COPY_AND_ASSIGN(LoginWizardView);
+};
+
+#endif // CHROME_BROWSER_CHROMEOS_LOGIN_WIZARD_VIEW_H_
diff --git a/chrome/browser/views/browser_dialogs.h b/chrome/browser/views/browser_dialogs.h
index 62e25e0..37c73cc6 100644
--- a/chrome/browser/views/browser_dialogs.h
+++ b/chrome/browser/views/browser_dialogs.h
@@ -89,8 +89,8 @@ void ShowNewProfileDialog();
void ShowTaskManager();
#if defined(OS_CHROMEOS)
-// Shows the Login Manager.
-void ShowLoginManager();
+// Shows the Login Wizard.
+void ShowLoginWizard();
#endif
// Shows a dialog box that allows a search engine to be edited. |template_url|
diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi
index 61d40f3..91da6e8 100755
--- a/chrome/chrome_browser.gypi
+++ b/chrome/chrome_browser.gypi
@@ -289,6 +289,8 @@
'browser/chromeos/login_library.h',
'browser/chromeos/login_manager_view.cc',
'browser/chromeos/login_manager_view.h',
+ 'browser/chromeos/login_wizard_view.cc',
+ 'browser/chromeos/login_wizard_view.h',
'browser/chromeos/main_menu.cc',
'browser/chromeos/main_menu.h',
'browser/chromeos/mount_library.cc',