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_); |
+} |