-
- // Fire notifications when downloads complete.
- if (!win8::IsSingleWindowMetroMode())
- return;
-
- if (download->GetState() != content::DownloadItem::COMPLETE)
- return;
-
- if (download->GetOpenWhenComplete() ||
- download->ShouldOpenFileBasedOnExtension() ||
- download->IsTemporary() ||
- download->GetAutoOpened())
- return;
-
- // Don't display the Windows8 metro notifications for an incognito download.
- if (download->GetBrowserContext() &&
- download->GetBrowserContext()->IsOffTheRecord())
- return;
-
- // Don't display the Windows 8 metro notifications if we are in the
- // foreground.
- HWND foreground_window = ::GetForegroundWindow();
- if (::IsWindow(foreground_window)) {
- DWORD process_id = 0;
- ::GetWindowThreadProcessId(foreground_window, &process_id);
- if (process_id == ::GetCurrentProcessId())
- return;
- }
-
- // In Windows 8 metro mode display a metro style notification which
- // informs the user that the download is complete.
- HMODULE metro = base::win::GetMetroModule();
- base::win::MetroNotification display_notification =
- reinterpret_cast<base::win::MetroNotification>(
- ::GetProcAddress(metro, "DisplayNotification"));
- DCHECK(display_notification);
- if (display_notification) {
- base::string16 title = l10n_util::GetStringUTF16(
- IDS_METRO_DOWNLOAD_COMPLETE_NOTIFICATION_TITLE);
- base::string16 body = l10n_util::GetStringUTF16(
- IDS_METRO_DOWNLOAD_COMPLETE_NOTIFICATION);
-
- // Dummy notification id. Every metro style notification needs a
- // unique notification id.
- std::string notification_id = kDownloadNotificationPrefix;
- notification_id += base::IntToString(g_next_notification_id++);
-
- display_notification(download->GetURL().spec().c_str(),
- "",
- title.c_str(),
- body.c_str(),
- L"",
- notification_id.c_str(),
- MetroDownloadNotificationClickedHandler,
- download->GetTargetFilePath().value().c_str());
- }