diff options
author | benwells@chromium.org <benwells@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-24 22:51:56 +0000 |
---|---|---|
committer | benwells@chromium.org <benwells@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-24 22:51:56 +0000 |
commit | b0bcd9be1d869022777a792e53b5c5ac2bd4a3c6 (patch) | |
tree | f21d6a03f3188dc9860ff492d7e203cae6597f89 /win8 | |
parent | 6fbe89a6031505d4b05e0f482e468bf3e9f16404 (diff) | |
download | chromium_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.cc | 90 | ||||
-rw-r--r-- | win8/metro_driver/secondary_tile.h | 11 |
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_ |