15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/sim_dialog_delegate.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#include "base/strings/stringprintf.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile_manager.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_dialogs.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/url_constants.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/size.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContents; 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebUIMessageHandler; 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Default width/height of the dialog. 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kDefaultWidth = 350; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kDefaultHeight = 225; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Width/height for the change PIN dialog mode. 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kChangePinWidth = 350; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kChangePinHeight = 245; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Dialog mode constants. 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kSimDialogChangePinMode[] = "change-pin"; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kSimDialogSetLockOnMode[] = "set-lock-on"; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kSimDialogSetLockOffMode[] = "set-lock-off"; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SimDialogDelegate::ShowDialog(gfx::NativeWindow owning_window, 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimDialogMode mode) { 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::ShowWebDialog(owning_window, 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ProfileManager::GetActiveUserProfile(), 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new SimDialogDelegate(mode)); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SimDialogDelegate::SimDialogDelegate(SimDialogMode dialog_mode) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : dialog_mode_(dialog_mode) { 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SimDialogDelegate::~SimDialogDelegate() { 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ui::ModalType SimDialogDelegate::GetDialogModalType() const { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ui::MODAL_TYPE_SYSTEM; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 SimDialogDelegate::GetDialogTitle() const { 55a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return base::string16(); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GURL SimDialogDelegate::GetDialogContentURL() const { 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (dialog_mode_ == SIM_DIALOG_UNLOCK) { 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string url_string(chrome::kChromeUISimUnlockURL); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GURL(url_string); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string mode_value; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (dialog_mode_ == SIM_DIALOG_CHANGE_PIN) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mode_value = kSimDialogChangePinMode; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (dialog_mode_ == SIM_DIALOG_SET_LOCK_ON) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mode_value = kSimDialogSetLockOnMode; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mode_value = kSimDialogSetLockOffMode; 705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Create a URL that includes an additional mode (other than Unlock flow). 725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Possible values for mode are: 735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // change-pin - use dialog to change PIN, ask for old & new PIN. 745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // set-lock-on - enable RequirePin restriction. 755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // set-lock-off - disable RequirePin restriction. 765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::string url_string = 775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::string(chrome::kChromeUISimUnlockURL) + "?mode=" + mode_value; 785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return GURL(url_string); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SimDialogDelegate::GetWebUIMessageHandlers( 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<WebUIMessageHandler*>* handlers) const { 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SimDialogDelegate::GetDialogSize(gfx::Size* size) const { 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(nkostylev): Set custom size based on locale settings. 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (dialog_mode_ == SIM_DIALOG_CHANGE_PIN) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size->SetSize(kChangePinWidth , kChangePinHeight); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size->SetSize(kDefaultWidth, kDefaultHeight); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string SimDialogDelegate::GetDialogArgs() const { 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return "[]"; 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SimDialogDelegate::OnDialogClosed(const std::string& json_retval) { 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete this; 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SimDialogDelegate::OnCloseContents(WebContents* source, 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool* out_close_dialog) { 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (out_close_dialog) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *out_close_dialog = true; 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool SimDialogDelegate::ShouldShowDialogTitle() const { 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool SimDialogDelegate::HandleContextMenu( 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::ContextMenuParams& params) { 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Disable context menu. 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace chromeos 119