| Index: chrome/browser/ui/metro_pin_tab_helper.cc
|
| diff --git a/chrome/browser/ui/metro_pin_tab_helper.cc b/chrome/browser/ui/metro_pin_tab_helper.cc
|
| index 0a16543cdfdffc42f1b389fe0db7a5a0e9988daf..a46137a51b561effcc02d4988ea8404b57abf64e 100644
|
| --- a/chrome/browser/ui/metro_pin_tab_helper.cc
|
| +++ b/chrome/browser/ui/metro_pin_tab_helper.cc
|
| @@ -6,6 +6,7 @@
|
|
|
| #include "base/logging.h"
|
| #include "base/utf_string_conversions.h"
|
| +#include "chrome/browser/ui/metro_pinned_state_observer.h"
|
| #include "content/public/browser/web_contents.h"
|
|
|
| #if defined(OS_WIN)
|
| @@ -14,7 +15,8 @@
|
|
|
| MetroPinTabHelper::MetroPinTabHelper(content::WebContents* web_contents)
|
| : content::WebContentsObserver(web_contents),
|
| - is_pinned_(false) {}
|
| + is_pinned_(false),
|
| + observer_(NULL) {}
|
|
|
| MetroPinTabHelper::~MetroPinTabHelper() {}
|
|
|
| @@ -40,8 +42,7 @@ void MetroPinTabHelper::TogglePinnedToStartScreen() {
|
| // TODO(benwells): This will update the state incorrectly if the user
|
| // cancels. To fix this some sort of callback needs to be introduced as
|
| // the pinning happens on another thread.
|
| - is_pinned_ = !is_pinned_;
|
| - return;
|
| + SetIsPinned(!is_pinned_);
|
| }
|
| #endif
|
| }
|
| @@ -66,9 +67,16 @@ void MetroPinTabHelper::UpdatePinnedStateForCurrentURL() {
|
| }
|
|
|
| GURL url = web_contents()->GetURL();
|
| - is_pinned_ = metro_is_pinned_to_start_screen(UTF8ToUTF16(url.spec())) != 0;
|
| + SetIsPinned(metro_is_pinned_to_start_screen(UTF8ToUTF16(url.spec())) != 0);
|
| VLOG(1) << __FUNCTION__ << " with url " << UTF8ToUTF16(url.spec())
|
| << " result: " << is_pinned_;
|
| }
|
| #endif
|
| }
|
| +
|
| +void MetroPinTabHelper::SetIsPinned(bool is_pinned) {
|
| + bool was_pinned = is_pinned_;
|
| + is_pinned_ = is_pinned;
|
| + if (observer_ && is_pinned_ != was_pinned)
|
| + observer_->MetroPinnedStateChanged(web_contents(), is_pinned_);
|
| +}
|
|
|