| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ui/views/apps/chrome_native_app_window_views_win.h" | 5 #include "chrome/browser/ui/views/apps/chrome_native_app_window_views_win.h" |
| 6 | 6 |
| 7 #include "apps/ui/views/app_window_frame_view.h" | 7 #include "apps/ui/views/app_window_frame_view.h" |
| 8 #include "ash/shell.h" | 8 #include "ash/shell.h" |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/files/file_util.h" | 10 #include "base/files/file_util.h" |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 101 if (desktop_type == chrome::HOST_DESKTOP_TYPE_ASH) | 101 if (desktop_type == chrome::HOST_DESKTOP_TYPE_ASH) |
| 102 init_params->context = ash::Shell::GetPrimaryRootWindow(); | 102 init_params->context = ash::Shell::GetPrimaryRootWindow(); |
| 103 else | 103 else |
| 104 init_params->native_widget = new AppWindowDesktopNativeWidgetAuraWin(this); | 104 init_params->native_widget = new AppWindowDesktopNativeWidgetAuraWin(this); |
| 105 } | 105 } |
| 106 | 106 |
| 107 void ChromeNativeAppWindowViewsWin::InitializeDefaultWindow( | 107 void ChromeNativeAppWindowViewsWin::InitializeDefaultWindow( |
| 108 const extensions::AppWindow::CreateParams& create_params) { | 108 const extensions::AppWindow::CreateParams& create_params) { |
| 109 ChromeNativeAppWindowViews::InitializeDefaultWindow(create_params); | 109 ChromeNativeAppWindowViews::InitializeDefaultWindow(create_params); |
| 110 | 110 |
| 111 // Remaining initialization is for Windows shell integration, which doesn't |
| 112 // apply to app windows in Ash. |
| 113 if (IsRunningInAsh()) |
| 114 return; |
| 115 |
| 111 const extensions::Extension* extension = app_window()->GetExtension(); | 116 const extensions::Extension* extension = app_window()->GetExtension(); |
| 112 if (!extension) | 117 if (!extension) |
| 113 return; | 118 return; |
| 114 | 119 |
| 115 std::string app_name = | 120 std::string app_name = |
| 116 web_app::GenerateApplicationNameFromExtensionId(extension->id()); | 121 web_app::GenerateApplicationNameFromExtensionId(extension->id()); |
| 117 base::string16 app_name_wide = base::UTF8ToWide(app_name); | 122 base::string16 app_name_wide = base::UTF8ToWide(app_name); |
| 118 HWND hwnd = GetNativeAppWindowHWND(); | 123 HWND hwnd = GetNativeAppWindowHWND(); |
| 119 Profile* profile = | 124 Profile* profile = |
| 120 Profile::FromBrowserContext(app_window()->browser_context()); | 125 Profile::FromBrowserContext(app_window()->browser_context()); |
| 121 app_model_id_ = | 126 app_model_id_ = |
| 122 ShellIntegration::GetAppModelIdForProfile(app_name_wide, | 127 ShellIntegration::GetAppModelIdForProfile(app_name_wide, |
| 123 profile->GetPath()); | 128 profile->GetPath()); |
| 124 ui::win::SetAppIdForWindow(app_model_id_, hwnd); | 129 ui::win::SetAppIdForWindow(app_model_id_, hwnd); |
| 125 | |
| 126 web_app::UpdateRelaunchDetailsForApp(profile, extension, hwnd); | 130 web_app::UpdateRelaunchDetailsForApp(profile, extension, hwnd); |
| 127 | 131 |
| 128 if (!create_params.alpha_enabled && !IsRunningInAsh()) | 132 if (!create_params.alpha_enabled) |
| 129 EnsureCaptionStyleSet(); | 133 EnsureCaptionStyleSet(); |
| 130 UpdateShelfMenu(); | 134 UpdateShelfMenu(); |
| 131 } | 135 } |
| 132 | 136 |
| 133 views::NonClientFrameView* | 137 views::NonClientFrameView* |
| 134 ChromeNativeAppWindowViewsWin::CreateStandardDesktopAppFrame() { | 138 ChromeNativeAppWindowViewsWin::CreateStandardDesktopAppFrame() { |
| 135 glass_frame_view_ = NULL; | 139 glass_frame_view_ = NULL; |
| 136 if (ui::win::IsAeroGlassEnabled()) { | 140 if (ui::win::IsAeroGlassEnabled()) { |
| 137 glass_frame_view_ = new GlassAppWindowFrameViewWin(this, widget()); | 141 glass_frame_view_ = new GlassAppWindowFrameViewWin(this, widget()); |
| 138 return glass_frame_view_; | 142 return glass_frame_view_; |
| 139 } | 143 } |
| 140 return ChromeNativeAppWindowViews::CreateStandardDesktopAppFrame(); | 144 return ChromeNativeAppWindowViews::CreateStandardDesktopAppFrame(); |
| 141 } | 145 } |
| 142 | 146 |
| 143 void ChromeNativeAppWindowViewsWin::Show() { | 147 void ChromeNativeAppWindowViewsWin::Show() { |
| 144 ActivateParentDesktopIfNecessary(); | 148 ActivateParentDesktopIfNecessary(); |
| 145 ChromeNativeAppWindowViews::Show(); | 149 ChromeNativeAppWindowViews::Show(); |
| 146 } | 150 } |
| 147 | 151 |
| 148 void ChromeNativeAppWindowViewsWin::Activate() { | 152 void ChromeNativeAppWindowViewsWin::Activate() { |
| 149 ActivateParentDesktopIfNecessary(); | 153 ActivateParentDesktopIfNecessary(); |
| 150 ChromeNativeAppWindowViews::Activate(); | 154 ChromeNativeAppWindowViews::Activate(); |
| 151 } | 155 } |
| 152 | 156 |
| 153 void ChromeNativeAppWindowViewsWin::UpdateShelfMenu() { | 157 void ChromeNativeAppWindowViewsWin::UpdateShelfMenu() { |
| 154 if (!JumpListUpdater::IsEnabled()) | 158 if (!JumpListUpdater::IsEnabled() || IsRunningInAsh()) |
| 155 return; | 159 return; |
| 156 | 160 |
| 157 // Currently the only option is related to ephemeral apps, so avoid updating | 161 // Currently the only option is related to ephemeral apps, so avoid updating |
| 158 // the app's jump list when the feature is not enabled. | 162 // the app's jump list when the feature is not enabled. |
| 159 if (!CommandLine::ForCurrentProcess()->HasSwitch( | 163 if (!CommandLine::ForCurrentProcess()->HasSwitch( |
| 160 switches::kEnableEphemeralApps)) { | 164 switches::kEnableEphemeralApps)) { |
| 161 return; | 165 return; |
| 162 } | 166 } |
| 163 | 167 |
| 164 const extensions::Extension* extension = app_window()->GetExtension(); | 168 const extensions::Extension* extension = app_window()->GetExtension(); |
| 165 if (!extension) | 169 if (!extension) |
| 166 return; | 170 return; |
| 167 | 171 |
| 168 // For the icon resources. | 172 // For the icon resources. |
| 169 base::FilePath chrome_path; | 173 base::FilePath chrome_path; |
| 170 if (!PathService::Get(base::FILE_EXE, &chrome_path)) | 174 if (!PathService::Get(base::FILE_EXE, &chrome_path)) |
| 171 return; | 175 return; |
| 172 | 176 |
| 177 DCHECK(!app_model_id_.empty()); |
| 178 |
| 173 JumpListUpdater jumplist_updater(app_model_id_); | 179 JumpListUpdater jumplist_updater(app_model_id_); |
| 174 if (!jumplist_updater.BeginUpdate()) | 180 if (!jumplist_updater.BeginUpdate()) |
| 175 return; | 181 return; |
| 176 | 182 |
| 177 // Add item to install ephemeral apps. | 183 // Add item to install ephemeral apps. |
| 178 if (extensions::util::IsEphemeralApp(extension->id(), | 184 if (extensions::util::IsEphemeralApp(extension->id(), |
| 179 app_window()->browser_context())) { | 185 app_window()->browser_context())) { |
| 180 scoped_refptr<ShellLinkItem> link(new ShellLinkItem()); | 186 scoped_refptr<ShellLinkItem> link(new ShellLinkItem()); |
| 181 link->set_title(l10n_util::GetStringUTF16(IDS_APP_INSTALL_TITLE)); | 187 link->set_title(l10n_util::GetStringUTF16(IDS_APP_INSTALL_TITLE)); |
| 182 link->set_icon(chrome_path.value(), | 188 link->set_icon(chrome_path.value(), |
| 183 icon_resources::kInstallPackagedAppIndex); | 189 icon_resources::kInstallPackagedAppIndex); |
| 184 ShellIntegration::AppendProfileArgs( | 190 ShellIntegration::AppendProfileArgs( |
| 185 app_window()->browser_context()->GetPath(), link->GetCommandLine()); | 191 app_window()->browser_context()->GetPath(), link->GetCommandLine()); |
| 186 link->GetCommandLine()->AppendSwitchASCII(switches::kInstallFromWebstore, | 192 link->GetCommandLine()->AppendSwitchASCII(switches::kInstallFromWebstore, |
| 187 extension->id()); | 193 extension->id()); |
| 188 | 194 |
| 189 ShellLinkItemList items; | 195 ShellLinkItemList items; |
| 190 items.push_back(link); | 196 items.push_back(link); |
| 191 jumplist_updater.AddTasks(items); | 197 jumplist_updater.AddTasks(items); |
| 192 } | 198 } |
| 193 | 199 |
| 194 // Note that an empty jumplist must still be committed to clear all items. | 200 // Note that an empty jumplist must still be committed to clear all items. |
| 195 jumplist_updater.CommitUpdate(); | 201 jumplist_updater.CommitUpdate(); |
| 196 } | 202 } |
| OLD | NEW |