summaryrefslogtreecommitdiffstats
path: root/win8
diff options
context:
space:
mode:
authorbenwells@chromium.org <benwells@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-24 22:51:56 +0000
committerbenwells@chromium.org <benwells@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-24 22:51:56 +0000
commitb0bcd9be1d869022777a792e53b5c5ac2bd4a3c6 (patch)
treef21d6a03f3188dc9860ff492d7e203cae6597f89 /win8
parent6fbe89a6031505d4b05e0f482e468bf3e9f16404 (diff)
downloadchromium_src-b0bcd9be1d869022777a792e53b5c5ac2bd4a3c6.zip
chromium_src-b0bcd9be1d869022777a792e53b5c5ac2bd4a3c6.tar.gz
chromium_src-b0bcd9be1d869022777a792e53b5c5ac2bd4a3c6.tar.bz2
Site specific secondary tiles for Windows 8.
When pages are pinned to the start screen, if there is a favicon available for the site it is used to generate the tile. BUG=140942 Review URL: https://chromiumcodereview.appspot.com/11198025 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@163943 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'win8')
-rw-r--r--win8/metro_driver/secondary_tile.cc90
-rw-r--r--win8/metro_driver/secondary_tile.h11
2 files changed, 44 insertions, 57 deletions
diff --git a/win8/metro_driver/secondary_tile.cc b/win8/metro_driver/secondary_tile.cc
index c784fdc..97109c1 100644
--- a/win8/metro_driver/secondary_tile.cc
+++ b/win8/metro_driver/secondary_tile.cc
@@ -7,49 +7,16 @@
#include <windows.ui.startscreen.h>
-#include "base/base_paths.h"
#include "base/bind.h"
-#include "base/file_path.h"
#include "base/logging.h"
-#include "base/path_service.h"
-#include "base/string_number_conversions.h"
#include "base/utf_string_conversions.h"
-#include "crypto/sha2.h"
#include "googleurl/src/gurl.h"
#include "win8/metro_driver/chrome_app_view.h"
#include "win8/metro_driver/winrt_utils.h"
namespace {
-string16 GenerateTileId(const string16& url_str) {
- uint8 hash[crypto::kSHA256Length];
- crypto::SHA256HashString(UTF16ToUTF8(url_str), hash, sizeof(hash));
- std::string hash_str = base::HexEncode(hash, sizeof(hash));
- return UTF8ToUTF16(hash_str);
-}
-
-string16 GetLogoUrlString() {
- FilePath module_path;
- PathService::Get(base::DIR_MODULE, &module_path);
- string16 scheme(L"ms-appx:///");
- return scheme.append(module_path.BaseName().value())
- .append(L"/SecondaryTile.png");
-}
-
-BOOL IsPinnedToStartScreen(const string16& url_str) {
- mswr::ComPtr<winui::StartScreen::ISecondaryTileStatics> tile_statics;
- HRESULT hr = winrt_utils::CreateActivationFactory(
- RuntimeClass_Windows_UI_StartScreen_SecondaryTile,
- tile_statics.GetAddressOf());
- CheckHR(hr, "Failed to create instance of ISecondaryTileStatics");
-
- boolean exists;
- hr = tile_statics->Exists(MakeHString(GenerateTileId(url_str)), &exists);
- CheckHR(hr, "ISecondaryTileStatics.Exists failed");
- return exists;
-}
-
-void DeleteTileFromStartScreen(const string16& url_str) {
+void DeleteTileFromStartScreen(const string16& tile_id) {
DVLOG(1) << __FUNCTION__;
mswr::ComPtr<winui::StartScreen::ISecondaryTileFactory> tile_factory;
HRESULT hr = winrt_utils::CreateActivationFactory(
@@ -58,7 +25,7 @@ void DeleteTileFromStartScreen(const string16& url_str) {
CheckHR(hr, "Failed to create instance of ISecondaryTileFactory");
mswrw::HString id;
- id.Attach(MakeHString(GenerateTileId(url_str)));
+ id.Attach(MakeHString(tile_id));
mswr::ComPtr<winui::StartScreen::ISecondaryTile> tile;
hr = tile_factory->CreateWithId(id.Get(), tile.GetAddressOf());
@@ -76,9 +43,12 @@ void DeleteTileFromStartScreen(const string16& url_str) {
CheckHR(hr, "Failed to put_Completed");
}
-void CreateTileOnStartScreen(const string16& title_str,
- const string16& url_str) {
+void CreateTileOnStartScreen(const string16& tile_id,
+ const string16& title_str,
+ const string16& url_str,
+ const FilePath& logo_path) {
VLOG(1) << __FUNCTION__;
+
mswr::ComPtr<winui::StartScreen::ISecondaryTileFactory> tile_factory;
HRESULT hr = winrt_utils::CreateActivationFactory(
RuntimeClass_Windows_UI_StartScreen_SecondaryTile,
@@ -89,8 +59,10 @@ void CreateTileOnStartScreen(const string16& title_str,
winui::StartScreen::TileOptions_ShowNameOnLogo;
mswrw::HString title;
title.Attach(MakeHString(title_str));
+
mswrw::HString id;
- id.Attach(MakeHString(GenerateTileId(url_str)));
+ id.Attach(MakeHString(tile_id));
+
mswrw::HString args;
// The url is just passed into the tile agruments as is. Metro and desktop
// chrome will see the arguments as command line parameters.
@@ -105,7 +77,7 @@ void CreateTileOnStartScreen(const string16& title_str,
CheckHR(hr, "Failed to create URIFactory");
mswrw::HString logo_url;
- logo_url.Attach(MakeHString(GetLogoUrlString()));
+ logo_url.Attach(MakeHString(string16(L"file:///").append(logo_path.value())));
mswr::ComPtr<winfoundtn::IUriRuntimeClass> uri;
hr = uri_factory->CreateUri(logo_url.Get(), &uri);
CheckHR(hr, "Failed to create URI");
@@ -135,26 +107,34 @@ void CreateTileOnStartScreen(const string16& title_str,
CheckHR(hr, "Failed to put_Completed");
}
-void TogglePinnedToStartScreen(const string16& title_str,
- const string16& url_str) {
- if (IsPinnedToStartScreen(url_str)) {
- DeleteTileFromStartScreen(url_str);
- return;
- }
+} // namespace
- CreateTileOnStartScreen(title_str, url_str);
-}
+BOOL MetroIsPinnedToStartScreen(const string16& tile_id) {
+ mswr::ComPtr<winui::StartScreen::ISecondaryTileStatics> tile_statics;
+ HRESULT hr = winrt_utils::CreateActivationFactory(
+ RuntimeClass_Windows_UI_StartScreen_SecondaryTile,
+ tile_statics.GetAddressOf());
+ CheckHR(hr, "Failed to create instance of ISecondaryTileStatics");
-} // namespace
+ boolean exists;
+ hr = tile_statics->Exists(MakeHString(tile_id), &exists);
+ CheckHR(hr, "ISecondaryTileStatics.Exists failed");
+ return exists;
+}
-BOOL MetroIsPinnedToStartScreen(const string16& url) {
- VLOG(1) << __FUNCTION__ << " url: " << url;
- return IsPinnedToStartScreen(url);
+void MetroUnPinFromStartScreen(const string16& tile_id) {
+ globals.appview_msg_loop->PostTask(
+ FROM_HERE, base::Bind(&DeleteTileFromStartScreen, tile_id));
}
-void MetroTogglePinnedToStartScreen(const string16& title,
- const string16& url) {
- DVLOG(1) << __FUNCTION__ << " title:" << title << " url: " << url;
+void MetroPinToStartScreen(const string16& tile_id,
+ const string16& title,
+ const string16& url,
+ const FilePath& logo_path) {
globals.appview_msg_loop->PostTask(
- FROM_HERE, base::Bind(&TogglePinnedToStartScreen, title, url));
+ FROM_HERE, base::Bind(&CreateTileOnStartScreen,
+ tile_id,
+ title,
+ url,
+ logo_path));
}
diff --git a/win8/metro_driver/secondary_tile.h b/win8/metro_driver/secondary_tile.h
index 796e881..caee7e8 100644
--- a/win8/metro_driver/secondary_tile.h
+++ b/win8/metro_driver/secondary_tile.h
@@ -4,13 +4,20 @@
#ifndef CHROME_BROWSER_UI_METRO_DRIVER_SECONDARY_TILE_H_
#define CHROME_BROWSER_UI_METRO_DRIVER_SECONDARY_TILE_H_
+#include "base/file_path.h"
#include "base/string16.h"
extern "C" __declspec(dllexport)
-BOOL MetroIsPinnedToStartScreen(const string16& url);
+BOOL MetroIsPinnedToStartScreen(const string16& tile_id);
extern "C" __declspec(dllexport)
-void MetroTogglePinnedToStartScreen(const string16& title, const string16& url);
+void MetroUnPinFromStartScreen(const string16& tile_id);
+
+extern "C" __declspec(dllexport)
+void MetroPinToStartScreen(const string16& tile_id,
+ const string16& title,
+ const string16& url,
+ const FilePath& logo_path);
#endif // CHROME_BROWSER_UI_METRO_DRIVER_SECONDARY_TILE_H_