1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chrome/browser/chromeos/login/help_app_launcher.h" 6 7 #include <string> 8 9 #include "base/strings/stringprintf.h" 10 #include "base/strings/utf_string_conversions.h" 11 #include "chrome/browser/chromeos/login/helper.h" 12 #include "chrome/browser/chromeos/profiles/profile_helper.h" 13 #include "chrome/browser/extensions/extension_service.h" 14 #include "chrome/grit/generated_resources.h" 15 #include "chrome/grit/locale_settings.h" 16 #include "content/public/browser/browser_thread.h" 17 #include "extensions/browser/extension_system.h" 18 #include "ui/base/l10n/l10n_util.h" 19 #include "ui/gfx/rect.h" 20 #include "ui/gfx/size.h" 21 22 using content::BrowserThread; 23 24 namespace { 25 26 const char kHelpAppFormat[] = 27 "chrome-extension://honijodknafkokifofgiaalefdiedpko/oobe.html?id=%d"; 28 29 } // namespace 30 31 namespace chromeos { 32 33 /////////////////////////////////////////////////////////////////////////////// 34 // HelpApp, public: 35 36 HelpAppLauncher::HelpAppLauncher(gfx::NativeWindow parent_window) 37 : parent_window_(parent_window) { 38 } 39 40 void HelpAppLauncher::ShowHelpTopic(HelpTopic help_topic_id) { 41 Profile* profile = ProfileHelper::GetSigninProfile(); 42 ExtensionService* service = 43 extensions::ExtensionSystem::Get(profile)->extension_service(); 44 45 DCHECK(service); 46 if (!service) 47 return; 48 49 GURL url(base::StringPrintf(kHelpAppFormat, 50 static_cast<int>(help_topic_id))); 51 // HelpApp component extension presents only in official builds so we can 52 // show help only when the extensions is installed. 53 if (service->extensions()->GetByID(url.host())) 54 ShowHelpTopicDialog(profile, GURL(url)); 55 } 56 57 /////////////////////////////////////////////////////////////////////////////// 58 // HelpApp, protected: 59 60 HelpAppLauncher::~HelpAppLauncher() {} 61 62 /////////////////////////////////////////////////////////////////////////////// 63 // HelpApp, private: 64 65 void HelpAppLauncher::ShowHelpTopicDialog(Profile* profile, 66 const GURL& topic_url) { 67 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 68 LoginWebDialog* dialog = new LoginWebDialog( 69 profile, 70 NULL, 71 parent_window_, 72 l10n_util::GetStringUTF16(IDS_LOGIN_OOBE_HELP_DIALOG_TITLE), 73 topic_url, 74 LoginWebDialog::STYLE_BUBBLE); 75 gfx::Rect screen_bounds(chromeos::CalculateScreenBounds(gfx::Size())); 76 dialog->SetDialogSize(l10n_util::GetLocalizedContentsWidthInPixels( 77 IDS_HELP_APP_DIALOG_WIDTH_PIXELS), 78 l10n_util::GetLocalizedContentsWidthInPixels( 79 IDS_HELP_APP_DIALOG_HEIGHT_PIXELS)); 80 dialog->Show(); 81 // The dialog object will be deleted on dialog close. 82 } 83 84 } // namespace chromeos 85