diff options
author | ben <ben@chromium.org> | 2016-03-16 11:02:58 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-03-16 18:04:46 +0000 |
commit | f1e8fe46d99e15abe6f2b3270fe65ade9269997d (patch) | |
tree | 060cf7eb56defc03a0c99881b5a7c9d5be3dff1e /mash/login/login.cc | |
parent | 8c17f62a8425b4e4547255495073e673312a86b6 (diff) | |
download | chromium_src-f1e8fe46d99e15abe6f2b3270fe65ade9269997d.zip chromium_src-f1e8fe46d99e15abe6f2b3270fe65ade9269997d.tar.gz chromium_src-f1e8fe46d99e15abe6f2b3270fe65ade9269997d.tar.bz2 |
Restructure login
BUG=
Review URL: https://codereview.chromium.org/1801133002
Cr-Commit-Position: refs/heads/master@{#381494}
Diffstat (limited to 'mash/login/login.cc')
-rw-r--r-- | mash/login/login.cc | 139 |
1 files changed, 42 insertions, 97 deletions
diff --git a/mash/login/login.cc b/mash/login/login.cc index 7604850..05edab5 100644 --- a/mash/login/login.cc +++ b/mash/login/login.cc @@ -4,131 +4,76 @@ #include "mash/login/login.h" -#include "base/guid.h" #include "base/macros.h" -#include "base/message_loop/message_loop.h" -#include "base/strings/utf_string_conversions.h" -#include "components/mus/public/cpp/property_type_converters.h" -#include "mash/wm/public/interfaces/container.mojom.h" -#include "mojo/public/cpp/bindings/binding.h" +#include "mash/login/ui.h" +#include "mojo/public/cpp/bindings/strong_binding.h" #include "mojo/shell/public/cpp/connector.h" -#include "ui/views/background.h" -#include "ui/views/controls/button/label_button.h" #include "ui/views/mus/aura_init.h" -#include "ui/views/mus/native_widget_mus.h" #include "ui/views/mus/window_manager_connection.h" -#include "ui/views/widget/widget_delegate.h" namespace mash { namespace login { namespace { -class LoginView : public views::WidgetDelegateView, - public views::ButtonListener { +class Login : public mojom::Login { public: - explicit LoginView(Login* login) - : login_(login), - user_id_1_(base::GenerateGUID()), - user_id_2_(base::GenerateGUID()), - login_button_1_( - new views::LabelButton(this, base::ASCIIToUTF16("Timothy"))), - login_button_2_( - new views::LabelButton(this, base::ASCIIToUTF16("Jimothy"))) { - set_background(views::Background::CreateSolidBackground(SK_ColorRED)); - login_button_1_->SetStyle(views::Button::STYLE_BUTTON); - login_button_2_->SetStyle(views::Button::STYLE_BUTTON); - AddChildView(login_button_1_); - AddChildView(login_button_2_); - } - ~LoginView() override {} + Login(mojo::Connector* connector, + LoginController* controller, + const std::string& user_id, + mojom::LoginRequest request) + : connector_(connector), + controller_(controller), + user_id_(user_id), + binding_(this, std::move(request)) {} + ~Login() override {} private: - // Overridden from views::WidgetDelegate: - views::View* GetContentsView() override { return this; } - base::string16 GetWindowTitle() const override { - // TODO(beng): use resources. - return base::ASCIIToUTF16("Login"); + // mojom::Login: + void ShowLoginUI() override { + UI::Show(connector_, controller_); } - - // Overridden from views::View: - void Layout() override { - gfx::Rect button_box = GetLocalBounds(); - button_box.Inset(10, 10); - - gfx::Size ps1 = login_button_1_->GetPreferredSize(); - gfx::Size ps2 = login_button_2_->GetPreferredSize(); - - DCHECK(ps1.height() == ps2.height()); - - // The 10 is inter-button spacing. - button_box.set_x((button_box.width() - ps1.width() - ps2.width() - 10) / 2); - button_box.set_y((button_box.height() - ps1.height()) / 2); - - login_button_1_->SetBounds(button_box.x(), button_box.y(), ps1.width(), - ps1.height()); - login_button_2_->SetBounds(login_button_1_->bounds().right() + 10, - button_box.y(), ps2.width(), ps2.height()); + void Logout() override { + controller_->init()->StopServicesForUser(user_id_); + UI::Show(connector_, controller_); } - - // Overridden from views::ButtonListener: - void ButtonPressed(views::Button* sender, const ui::Event& event) override { - // Login... - mojo::Connector::ConnectParams params("mojo:mash_shell"); - if (sender == login_button_1_) { - login_->login()->LoginAs(user_id_1_); - } else if (sender == login_button_2_) { - login_->login()->LoginAs(user_id_2_); - } else { - NOTREACHED(); - } - base::MessageLoop::current()->QuitWhenIdle(); + void SwitchUser() override { + UI::Show(connector_, controller_); } - Login* login_; - const std::string user_id_1_; - const std::string user_id_2_; - views::LabelButton* login_button_1_; - views::LabelButton* login_button_2_; + mojo::Connector* connector_; + LoginController* controller_; + const std::string user_id_; + mojo::StrongBinding<mojom::Login> binding_; - DISALLOW_COPY_AND_ASSIGN(LoginView); + DISALLOW_COPY_AND_ASSIGN(Login); }; } // namespace -Login::Login() {} -Login::~Login() {} +LoginController::LoginController() {} +LoginController::~LoginController() {} -void Login::Initialize(mojo::Connector* connector, - const mojo::Identity& identity, - uint32_t id) { +void LoginController::Initialize(mojo::Connector* connector, + const mojo::Identity& identity, + uint32_t id) { + connector_ = connector; + login_user_id_ = identity.user_id(); tracing_.Initialize(connector, identity.name()); aura_init_.reset(new views::AuraInit(connector, "views_mus_resources.pak")); - views::WindowManagerConnection::Create(connector); - - views::Widget* widget = new views::Widget; - views::Widget::InitParams params( - views::Widget::InitParams::TYPE_WINDOW_FRAMELESS); - params.delegate = new LoginView(this); +} - std::map<std::string, std::vector<uint8_t>> properties; - properties[mash::wm::mojom::kWindowContainer_Property] = - mojo::TypeConverter<const std::vector<uint8_t>, int32_t>::Convert( - static_cast<int32_t>(mash::wm::mojom::Container::LOGIN_WINDOWS)); - mus::Window* window = - views::WindowManagerConnection::Get()->NewWindow(properties); - params.native_widget = new views::NativeWidgetMus( - widget, connector, window, mus::mojom::SurfaceType::DEFAULT); - widget->Init(params); - widget->Show(); +bool LoginController::AcceptConnection(mojo::Connection* connection) { + if (connection->GetRemoteIdentity().name() == "mojo:mash_init") + connection->GetInterface(&init_); + connection->AddInterface<mojom::Login>(this); + return true; } -bool Login::AcceptConnection(mojo::Connection* connection) { - if (connection->GetRemoteIdentity().name() == "mojo:mash_init") { - connection->GetInterface(&login_); - return true; - } - return false; +void LoginController::Create(mojo::Connection* connection, + mojom::LoginRequest request) { + new Login(connector_, this, connection->GetRemoteIdentity().user_id(), + std::move(request)); } } // namespace login |