This source file includes following definitions.
- ShowFirstRunDialog
- Show
- report_crashes_
- Done
- CreateExtraView
- OnClosed
- Accept
- GetDialogButtons
- LinkClicked
#include "chrome/browser/ui/views/first_run_dialog.h"
#include "chrome/browser/first_run/first_run.h"
#include "chrome/browser/platform_util.h"
#include "chrome/browser/shell_integration.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/url_constants.h"
#include "chrome/installer/util/google_update_settings.h"
#include "components/breakpad/app/breakpad_linux.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
#include "grit/locale_settings.h"
#include "grit/theme_resources.h"
#include "ui/aura/env.h"
#include "ui/aura/window.h"
#include "ui/aura/window_event_dispatcher.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/views/controls/button/checkbox.h"
#include "ui/views/controls/link.h"
#include "ui/views/layout/grid_layout.h"
#include "ui/views/layout/layout_constants.h"
#include "ui/views/widget/widget.h"
#include "ui/views/window/dialog_delegate.h"
#include "ui/wm/public/dispatcher_client.h"
#if defined(GOOGLE_CHROME_BUILD)
#include "base/prefs/pref_service.h"
#include "chrome/browser/browser_process.h"
#endif
using views::GridLayout;
namespace first_run {
bool ShowFirstRunDialog(Profile* profile) {
return FirstRunDialog::Show(profile);
}
}
bool FirstRunDialog::Show(Profile* profile) {
bool dialog_shown = false;
#if defined(GOOGLE_CHROME_BUILD)
const PrefService::Preference* metrics_reporting_pref =
g_browser_process->local_state()->FindPreference(
prefs::kMetricsReportingEnabled);
if (!metrics_reporting_pref ||
!metrics_reporting_pref->IsManaged()) {
FirstRunDialog* dialog = new FirstRunDialog(profile);
views::DialogDelegate::CreateDialogWidget(dialog, NULL, NULL)->Show();
aura::Window* anchor = dialog->GetWidget()->GetNativeWindow();
aura::client::DispatcherClient* client =
aura::client::GetDispatcherClient(anchor->GetRootWindow());
client->RunWithDispatcher(NULL);
dialog_shown = true;
}
#endif
return dialog_shown;
}
FirstRunDialog::FirstRunDialog(Profile* profile)
: profile_(profile),
make_default_(NULL),
report_crashes_(NULL) {
GridLayout* layout = GridLayout::CreatePanel(this);
SetLayoutManager(layout);
const int related_y = views::kRelatedControlVerticalSpacing;
views::ColumnSet* column_set = layout->AddColumnSet(0);
column_set->AddColumn(GridLayout::FILL, GridLayout::CENTER, 0,
GridLayout::USE_PREF, 0, 0);
layout->StartRow(0, 0);
make_default_ = new views::Checkbox(l10n_util::GetStringUTF16(
IDS_FR_CUSTOMIZE_DEFAULT_BROWSER));
make_default_->SetChecked(true);
layout->AddView(make_default_);
layout->StartRowWithPadding(0, 0, 0, related_y);
report_crashes_ = new views::Checkbox(l10n_util::GetStringUTF16(
IDS_OPTIONS_ENABLE_LOGGING));
layout->AddView(report_crashes_);
}
FirstRunDialog::~FirstRunDialog() {
}
void FirstRunDialog::Done() {
aura::Window* window = GetWidget()->GetNativeView();
aura::client::DispatcherClient* client =
aura::client::GetDispatcherClient(window->GetRootWindow());
client->QuitNestedMessageLoop();
}
views::View* FirstRunDialog::CreateExtraView() {
views::Link* link = new views::Link(l10n_util::GetStringUTF16(
IDS_LEARN_MORE));
link->set_listener(this);
return link;
}
void FirstRunDialog::OnClosed() {
first_run::SetShouldShowWelcomePage();
Done();
}
bool FirstRunDialog::Accept() {
GetWidget()->Hide();
if (report_crashes_ && report_crashes_->checked()) {
if (GoogleUpdateSettings::SetCollectStatsConsent(true))
breakpad::InitCrashReporter(std::string());
} else {
GoogleUpdateSettings::SetCollectStatsConsent(false);
}
if (make_default_ && make_default_->checked())
ShellIntegration::SetAsDefaultBrowser();
Done();
return true;
}
int FirstRunDialog::GetDialogButtons() const {
return ui::DIALOG_BUTTON_OK;
}
void FirstRunDialog::LinkClicked(views::Link* source, int event_flags) {
platform_util::OpenExternal(profile_, GURL(chrome::kLearnMoreReportingURL));
}