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
22using content::BrowserThread;
23
24namespace {
25
26const char kHelpAppFormat[] =
27    "chrome-extension://honijodknafkokifofgiaalefdiedpko/oobe.html?id=%d";
28
29}  // namespace
30
31namespace chromeos {
32
33///////////////////////////////////////////////////////////////////////////////
34// HelpApp, public:
35
36HelpAppLauncher::HelpAppLauncher(gfx::NativeWindow parent_window)
37    : parent_window_(parent_window) {
38}
39
40void 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
60HelpAppLauncher::~HelpAppLauncher() {}
61
62///////////////////////////////////////////////////////////////////////////////
63// HelpApp, private:
64
65void 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