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/login/help_app_launcher.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#include "base/strings/stringprintf.h"
10868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/browser/chromeos/login/helper.h"
12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/profiles/profile_helper.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_service.h"
146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/grit/generated_resources.h"
156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/grit/locale_settings.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_thread.h"
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_system.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h"
194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ui/gfx/rect.h"
204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ui/gfx/size.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kHelpAppFormat[] =
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "chrome-extension://honijodknafkokifofgiaalefdiedpko/oobe.html?id=%d";
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos {
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)///////////////////////////////////////////////////////////////////////////////
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// HelpApp, public:
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HelpAppLauncher::HelpAppLauncher(gfx::NativeWindow parent_window)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : parent_window_(parent_window) {
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void HelpAppLauncher::ShowHelpTopic(HelpTopic help_topic_id) {
41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  Profile* profile = ProfileHelper::GetSigninProfile();
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ExtensionService* service =
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      extensions::ExtensionSystem::Get(profile)->extension_service();
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(service);
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!service)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL url(base::StringPrintf(kHelpAppFormat,
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              static_cast<int>(help_topic_id)));
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // HelpApp component extension presents only in official builds so we can
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // show help only when the extensions is installed.
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (service->extensions()->GetByID(url.host()))
54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    ShowHelpTopicDialog(profile, GURL(url));
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)///////////////////////////////////////////////////////////////////////////////
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// HelpApp, protected:
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HelpAppLauncher::~HelpAppLauncher() {}
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)///////////////////////////////////////////////////////////////////////////////
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// HelpApp, private:
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
65a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void HelpAppLauncher::ShowHelpTopicDialog(Profile* profile,
66a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                          const GURL& topic_url) {
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LoginWebDialog* dialog = new LoginWebDialog(
69a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      profile,
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      NULL,
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      parent_window_,
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      l10n_util::GetStringUTF16(IDS_LOGIN_OOBE_HELP_DIALOG_TITLE),
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      topic_url,
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      LoginWebDialog::STYLE_BUBBLE);
754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  gfx::Rect screen_bounds(chromeos::CalculateScreenBounds(gfx::Size()));
764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  dialog->SetDialogSize(l10n_util::GetLocalizedContentsWidthInPixels(
774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                            IDS_HELP_APP_DIALOG_WIDTH_PIXELS),
784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                        l10n_util::GetLocalizedContentsWidthInPixels(
794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                            IDS_HELP_APP_DIALOG_HEIGHT_PIXELS));
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  dialog->Show();
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The dialog object will be deleted on dialog close.
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace chromeos
85