Index: athena/content/web_activity.cc |
diff --git a/athena/content/web_activity.cc b/athena/content/web_activity.cc |
deleted file mode 100644 |
index 3944af3563f75f6d4620b471ba7000720089aef2..0000000000000000000000000000000000000000 |
--- a/athena/content/web_activity.cc |
+++ /dev/null |
@@ -1,661 +0,0 @@ |
-// Copyright 2014 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "athena/content/web_activity.h" |
- |
-#include "athena/activity/public/activity_factory.h" |
-#include "athena/activity/public/activity_manager.h" |
-#include "athena/activity/public/activity_view.h" |
-#include "athena/content/content_proxy.h" |
-#include "athena/content/media_utils.h" |
-#include "athena/content/public/dialogs.h" |
-#include "athena/content/web_activity_helpers.h" |
-#include "athena/input/public/accelerator_manager.h" |
-#include "athena/strings/grit/athena_strings.h" |
-#include "base/bind.h" |
-#include "base/command_line.h" |
-#include "base/strings/utf_string_conversions.h" |
-#include "components/app_modal/javascript_dialog_manager.h" |
-#include "components/favicon_base/select_favicon_frames.h" |
-#include "content/public/browser/navigation_controller.h" |
-#include "content/public/browser/web_contents.h" |
-#include "content/public/browser/web_contents_delegate.h" |
-#include "content/public/common/content_switches.h" |
-#include "content/public/common/favicon_url.h" |
-#include "ui/aura/window.h" |
-#include "ui/base/l10n/l10n_util.h" |
-#include "ui/compositor/closure_animation_observer.h" |
-#include "ui/compositor/scoped_layer_animation_settings.h" |
-#include "ui/content_accelerators/accelerator_util.h" |
-#include "ui/views/background.h" |
-#include "ui/views/controls/label.h" |
-#include "ui/views/controls/webview/unhandled_keyboard_event_handler.h" |
-#include "ui/views/controls/webview/webview.h" |
-#include "ui/views/focus/focus_manager.h" |
-#include "ui/views/widget/widget.h" |
- |
-namespace athena { |
-namespace { |
- |
-class WebActivityController : public AcceleratorHandler { |
- public: |
- enum Command { |
- CMD_BACK, |
- CMD_FORWARD, |
- CMD_RELOAD, |
- CMD_RELOAD_IGNORE_CACHE, |
- CMD_CLOSE, |
- CMD_STOP, |
- }; |
- |
- explicit WebActivityController(WebActivity* owner_activity, |
- views::WebView* web_view) |
- : owner_activity_(owner_activity), |
- web_view_(web_view), |
- reserved_accelerator_enabled_(true) {} |
- ~WebActivityController() override {} |
- |
- // Installs accelerators for web activity. |
- void InstallAccelerators() { |
- accelerator_manager_ = AcceleratorManager::CreateForFocusManager( |
- web_view_->GetFocusManager()).Pass(); |
- const AcceleratorData accelerator_data[] = { |
- {TRIGGER_ON_PRESS, ui::VKEY_R, ui::EF_CONTROL_DOWN, CMD_RELOAD, |
- AF_NONE}, |
- {TRIGGER_ON_PRESS, ui::VKEY_BROWSER_REFRESH, ui::EF_NONE, CMD_RELOAD, |
- AF_NONE}, |
- {TRIGGER_ON_PRESS, ui::VKEY_BROWSER_REFRESH, ui::EF_CONTROL_DOWN, |
- CMD_RELOAD_IGNORE_CACHE, AF_NONE}, |
- {TRIGGER_ON_PRESS, ui::VKEY_BROWSER_FORWARD, ui::EF_NONE, CMD_FORWARD, |
- AF_NONE}, |
- {TRIGGER_ON_PRESS, ui::VKEY_BROWSER_BACK, ui::EF_NONE, CMD_BACK, |
- AF_NONE}, |
- {TRIGGER_ON_PRESS, ui::VKEY_W, ui::EF_CONTROL_DOWN, CMD_CLOSE, AF_NONE}, |
- {TRIGGER_ON_PRESS, ui::VKEY_ESCAPE, ui::EF_NONE, CMD_STOP, AF_NONE}, |
- }; |
- accelerator_manager_->RegisterAccelerators( |
- accelerator_data, arraysize(accelerator_data), this); |
- } |
- |
- // Methods that are called before and after key events are consumed by the web |
- // contents. |
- // See the documentation in WebContentsDelegate: for more details. |
- bool PreHandleKeyboardEvent(content::WebContents* source, |
- const content::NativeWebKeyboardEvent& event, |
- bool* is_keyboard_shortcut) { |
- ui::Accelerator accelerator = |
- ui::GetAcceleratorFromNativeWebKeyboardEvent(event); |
- |
- if (reserved_accelerator_enabled_ && |
- accelerator_manager_->IsRegistered(accelerator, AF_RESERVED)) { |
- return web_view_->GetFocusManager()->ProcessAccelerator(accelerator); |
- } |
- *is_keyboard_shortcut = |
- accelerator_manager_->IsRegistered(accelerator, AF_NONE); |
- return false; |
- } |
- |
- void HandleKeyboardEvent(content::WebContents* source, |
- const content::NativeWebKeyboardEvent& event) { |
- unhandled_keyboard_event_handler_.HandleKeyboardEvent( |
- event, web_view_->GetFocusManager()); |
- } |
- |
- private: |
- // AcceleratorHandler: |
- bool IsCommandEnabled(int command_id) const override { |
- switch (command_id) { |
- case CMD_RELOAD: |
- case CMD_RELOAD_IGNORE_CACHE: |
- return true; |
- case CMD_BACK: |
- return web_view_->GetWebContents()->GetController().CanGoBack(); |
- case CMD_FORWARD: |
- return web_view_->GetWebContents()->GetController().CanGoForward(); |
- case CMD_CLOSE: |
- // TODO(oshima): check onbeforeunload handler. |
- return true; |
- case CMD_STOP: |
- return web_view_->GetWebContents()->IsLoading(); |
- } |
- return false; |
- } |
- |
- bool OnAcceleratorFired(int command_id, |
- const ui::Accelerator& accelerator) override { |
- switch (command_id) { |
- case CMD_RELOAD: |
- web_view_->GetWebContents()->GetController().Reload(false); |
- return true; |
- case CMD_RELOAD_IGNORE_CACHE: |
- web_view_->GetWebContents()->GetController().ReloadIgnoringCache(false); |
- return true; |
- case CMD_BACK: |
- web_view_->GetWebContents()->GetController().GoBack(); |
- return true; |
- case CMD_FORWARD: |
- web_view_->GetWebContents()->GetController().GoForward(); |
- return true; |
- case CMD_CLOSE: |
- Activity::Delete(owner_activity_); |
- return true; |
- case CMD_STOP: |
- web_view_->GetWebContents()->Stop(); |
- return true; |
- } |
- return false; |
- } |
- |
- Activity* const owner_activity_; |
- views::WebView* web_view_; |
- bool reserved_accelerator_enabled_; |
- scoped_ptr<AcceleratorManager> accelerator_manager_; |
- views::UnhandledKeyboardEventHandler unhandled_keyboard_event_handler_; |
- |
- DISALLOW_COPY_AND_ASSIGN(WebActivityController); |
-}; |
- |
-const SkColor kDefaultTitleColor = SkColorSetRGB(0xf2, 0xf2, 0xf2); |
-const int kIconSize = 32; |
-const float kDistanceShowReloadMessage = 100; |
-const float kDistanceReload = 150; |
- |
-} // namespace |
- |
-// A web view for athena's web activity. Note that AthenaWebView will create its |
-// own content so that it can eject and reload it. |
-class AthenaWebView : public views::WebView { |
- public: |
- explicit AthenaWebView(content::BrowserContext* context, |
- WebActivity* owner_activity) |
- : views::WebView(context), |
- controller_(new WebActivityController(owner_activity, this)), |
- owner_activity_(owner_activity), |
- fullscreen_(false), |
- overscroll_y_(0) { |
- SetEmbedFullscreenWidgetMode(true); |
- // TODO(skuhne): Add content observer to detect renderer crash and set |
- // content status to unloaded if that happens. |
- } |
- |
- AthenaWebView(content::WebContents* web_contents, |
- WebActivity* owner_activity) |
- : views::WebView(web_contents->GetBrowserContext()), |
- controller_(new WebActivityController(owner_activity, this)), |
- owner_activity_(owner_activity) { |
- scoped_ptr<content::WebContents> old_contents( |
- SwapWebContents(scoped_ptr<content::WebContents>(web_contents))); |
- } |
- |
- ~AthenaWebView() override {} |
- |
- void InstallAccelerators() { controller_->InstallAccelerators(); } |
- |
- void EvictContent() { |
- scoped_ptr<content::WebContents> old_contents(SwapWebContents( |
- scoped_ptr<content::WebContents>(content::WebContents::Create( |
- content::WebContents::CreateParams(browser_context()))))); |
- // If there is a progress bar, we need to get rid of it now since its |
- // associated content, parent window and layers will disappear with evicting |
- // the content. |
- progress_bar_.reset(); |
- evicted_web_contents_.reset( |
- content::WebContents::Create(content::WebContents::CreateParams( |
- old_contents->GetBrowserContext()))); |
- evicted_web_contents_->GetController().CopyStateFrom( |
- old_contents->GetController()); |
- // As soon as the new contents becomes visible, it should reload. |
- // TODO(skuhne): This breaks script connections with other activities. |
- // Even though this is the same technique as used by the TabStripModel, |
- // we might want to address this cleaner since we are more likely to |
- // run into this state. by unloading. |
- } |
- |
- void AttachHelpers() { |
- if (!IsContentEvicted()) |
- AttachWebActivityHelpers(GetWebContents()); |
- // Else: The helpers will be attached when the evicted content is reloaded. |
- } |
- |
- void ReloadEvictedContent() { |
- CHECK(evicted_web_contents_.get()); |
- |
- // Order is important. The helpers must be attached prior to the RenderView |
- // being created. |
- AttachWebActivityHelpers(evicted_web_contents_.get()); |
- |
- SwapWebContents(evicted_web_contents_.Pass()); |
- } |
- |
- // Check if the content got evicted. |
- const bool IsContentEvicted() { return !!evicted_web_contents_.get(); } |
- |
- // content::WebContentsDelegate: |
- content::WebContents* OpenURLFromTab( |
- content::WebContents* source, |
- const content::OpenURLParams& params) override { |
- switch(params.disposition) { |
- case CURRENT_TAB: { |
- DCHECK(source == web_contents()); |
- content::NavigationController::LoadURLParams load_url_params( |
- params.url); |
- load_url_params.referrer = params.referrer; |
- load_url_params.frame_tree_node_id = params.frame_tree_node_id; |
- load_url_params.transition_type = params.transition; |
- load_url_params.extra_headers = params.extra_headers; |
- load_url_params.should_replace_current_entry = |
- params.should_replace_current_entry; |
- load_url_params.is_renderer_initiated = params.is_renderer_initiated; |
- load_url_params.transferred_global_request_id = |
- params.transferred_global_request_id; |
- web_contents()->GetController().LoadURLWithParams(load_url_params); |
- return web_contents(); |
- } |
- case NEW_FOREGROUND_TAB: |
- case NEW_BACKGROUND_TAB: |
- case NEW_POPUP: |
- case NEW_WINDOW: { |
- Activity* activity = ActivityFactory::Get()->CreateWebActivity( |
- browser_context(), base::string16(), params.url); |
- Activity::Show(activity); |
- break; |
- } |
- default: |
- break; |
- } |
- // nullptr is returned if the URL wasn't opened immediately. |
- return nullptr; |
- } |
- |
- bool CanOverscrollContent() const override { |
- const std::string value = |
- base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( |
- switches::kOverscrollHistoryNavigation); |
- return value != "0"; |
- } |
- |
- void OverscrollUpdate(float delta_y) override { |
- overscroll_y_ = delta_y; |
- if (overscroll_y_ > kDistanceShowReloadMessage) { |
- if (!reload_message_) |
- CreateReloadMessage(); |
- reload_message_->Show(); |
- float opacity = 1.0f; |
- if (overscroll_y_ < kDistanceReload) { |
- opacity = (overscroll_y_ - kDistanceShowReloadMessage) / |
- (kDistanceReload - kDistanceShowReloadMessage); |
- } |
- reload_message_->GetLayer()->SetOpacity(opacity); |
- } else if (reload_message_) { |
- reload_message_->Hide(); |
- } |
- } |
- |
- void OverscrollComplete() override { |
- if (overscroll_y_ >= kDistanceReload) |
- GetWebContents()->GetController().Reload(false); |
- if (reload_message_) |
- reload_message_->Hide(); |
- overscroll_y_ = 0; |
- } |
- |
- void AddNewContents(content::WebContents* source, |
- content::WebContents* new_contents, |
- WindowOpenDisposition disposition, |
- const gfx::Rect& initial_pos, |
- bool user_gesture, |
- bool* was_blocked) override { |
- Activity* activity = |
- ActivityFactory::Get()->CreateWebActivity(new_contents); |
- Activity::Show(activity); |
- } |
- |
- bool PreHandleKeyboardEvent(content::WebContents* source, |
- const content::NativeWebKeyboardEvent& event, |
- bool* is_keyboard_shortcut) override { |
- return controller_->PreHandleKeyboardEvent( |
- source, event, is_keyboard_shortcut); |
- } |
- |
- void HandleKeyboardEvent( |
- content::WebContents* source, |
- const content::NativeWebKeyboardEvent& event) override { |
- controller_->HandleKeyboardEvent(source, event); |
- } |
- |
- void ToggleFullscreenModeForTab(content::WebContents* web_contents, |
- bool enter_fullscreen) override { |
- fullscreen_ = enter_fullscreen; |
- GetWidget()->SetFullscreen(fullscreen_); |
- } |
- |
- bool IsFullscreenForTabOrPending( |
- const content::WebContents* web_contents) const override { |
- return fullscreen_; |
- } |
- |
- void LoadingStateChanged(content::WebContents* source, |
- bool to_different_document) override { |
- bool has_stopped = source == nullptr || !source->IsLoading(); |
- LoadProgressChanged(source, has_stopped ? 1 : 0); |
- } |
- |
- void LoadProgressChanged(content::WebContents* source, |
- double progress) override { |
- if (!progress) |
- return; |
- |
- if (!progress_bar_) { |
- CreateProgressBar(); |
- source->GetNativeView()->layer()->Add(progress_bar_.get()); |
- } |
- progress_bar_->SetBounds(gfx::Rect( |
- 0, 0, progress * progress_bar_->parent()->bounds().width(), 3)); |
- if (progress < 1) |
- return; |
- |
- ui::ScopedLayerAnimationSettings settings(progress_bar_->GetAnimator()); |
- settings.SetTweenType(gfx::Tween::EASE_IN); |
- ui::Layer* layer = progress_bar_.get(); |
- settings.AddObserver(new ui::ClosureAnimationObserver( |
- base::Bind(&base::DeletePointer<ui::Layer>, progress_bar_.release()))); |
- layer->SetOpacity(0.f); |
- } |
- |
- content::JavaScriptDialogManager* GetJavaScriptDialogManager( |
- content::WebContents* contents) override { |
- return app_modal::JavaScriptDialogManager::GetInstance(); |
- } |
- |
- content::ColorChooser* OpenColorChooser( |
- content::WebContents* web_contents, |
- SkColor color, |
- const std::vector<content::ColorSuggestion>& suggestions) override { |
- return athena::OpenColorChooser(web_contents, color, suggestions); |
- } |
- |
- // Called when a file selection is to be done. |
- void RunFileChooser(content::WebContents* web_contents, |
- const content::FileChooserParams& params) override { |
- return athena::OpenFileChooser(web_contents, params); |
- } |
- |
- void CloseContents(content::WebContents* contents) override { |
- Activity::Delete(owner_activity_); |
- } |
- |
- private: |
- void CreateProgressBar() { |
- CHECK(!progress_bar_); |
- progress_bar_.reset(new ui::Layer(ui::LAYER_SOLID_COLOR)); |
- progress_bar_->SetColor(SkColorSetRGB(0x17, 0x59, 0xcd)); |
- } |
- |
- void CreateReloadMessage() { |
- CHECK(!reload_message_); |
- reload_message_.reset(new views::Widget); |
- views::Widget::InitParams params(views::Widget::InitParams::TYPE_CONTROL); |
- params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
- params.parent = GetWidget()->GetNativeView(); |
- reload_message_->Init(params); |
- |
- views::Label* label = new views::Label( |
- l10n_util::GetStringUTF16(IDS_ATHENA_PULL_TO_RELOAD_MESSAGE)); |
- label->SetBackgroundColor(SK_ColorGRAY); |
- label->set_background( |
- views::Background::CreateSolidBackground(SK_ColorGRAY)); |
- |
- reload_message_->SetContentsView(label); |
- reload_message_->SetBounds(ConvertRectToWidget( |
- gfx::Rect(0, 0, width(), label->GetPreferredSize().height()))); |
- } |
- |
- scoped_ptr<WebActivityController> controller_; |
- |
- Activity* const owner_activity_; |
- |
- // If the activity got evicted, this is the web content which holds the known |
- // state of the content before eviction. |
- scoped_ptr<content::WebContents> evicted_web_contents_; |
- |
- scoped_ptr<ui::Layer> progress_bar_; |
- |
- scoped_ptr<views::Widget> reload_message_; |
- |
- // TODO(oshima): Find out if we should support window fullscreen. |
- // It may still useful when a user is in split mode. |
- bool fullscreen_; |
- |
- // The distance that the user has overscrolled vertically. |
- float overscroll_y_; |
- |
- DISALLOW_COPY_AND_ASSIGN(AthenaWebView); |
-}; |
- |
-WebActivity::WebActivity(content::BrowserContext* browser_context, |
- const base::string16& title, |
- const GURL& url) |
- : browser_context_(browser_context), |
- web_view_(new AthenaWebView(browser_context, this)), |
- title_(title), |
- title_color_(kDefaultTitleColor), |
- current_state_(ACTIVITY_UNLOADED), |
- activity_view_(nullptr), |
- weak_ptr_factory_(this) { |
- // Order is important. The web activity helpers must be attached prior to the |
- // RenderView being created. |
- SetCurrentState(ACTIVITY_INVISIBLE); |
- web_view_->LoadInitialURL(url); |
-} |
- |
-WebActivity::WebActivity(content::WebContents* contents) |
- : browser_context_(contents->GetBrowserContext()), |
- web_view_(new AthenaWebView(contents, this)), |
- title_color_(kDefaultTitleColor), |
- current_state_(ACTIVITY_UNLOADED), |
- activity_view_(nullptr), |
- weak_ptr_factory_(this) { |
- // If the activity was created as a result of |
- // WebContentsDelegate::AddNewContents(), web activity helpers may not be |
- // created prior to the RenderView being created. Desktop Chrome has a |
- // similar problem. |
- SetCurrentState(ACTIVITY_INVISIBLE); |
-} |
- |
-WebActivity::~WebActivity() { |
- // It is not required to change the activity state to UNLOADED - unless we |
- // would add state observers. |
-} |
- |
-ActivityViewModel* WebActivity::GetActivityViewModel() { |
- return this; |
-} |
- |
-void WebActivity::SetCurrentState(Activity::ActivityState state) { |
- DCHECK_NE(state, current_state_); |
- if (current_state_ == ACTIVITY_UNLOADED) { |
- web_view_->AttachHelpers(); |
- if (web_view_->IsContentEvicted()) |
- web_view_->ReloadEvictedContent(); |
- Observe(web_view_->GetWebContents()); |
- } |
- |
- switch (state) { |
- case ACTIVITY_VISIBLE: |
- HideContentProxy(); |
- break; |
- case ACTIVITY_INVISIBLE: |
- if (current_state_ == ACTIVITY_VISIBLE) |
- ShowContentProxy(); |
- |
- break; |
- case ACTIVITY_BACKGROUND_LOW_PRIORITY: |
- DCHECK(ACTIVITY_VISIBLE == current_state_ || |
- ACTIVITY_INVISIBLE == current_state_); |
- // TODO(skuhne): Do this. |
- break; |
- case ACTIVITY_PERSISTENT: |
- DCHECK_EQ(ACTIVITY_BACKGROUND_LOW_PRIORITY, current_state_); |
- // TODO(skuhne): Do this. As soon as the new resource management is |
- // agreed upon - or remove otherwise. |
- break; |
- case ACTIVITY_UNLOADED: |
- DCHECK_NE(ACTIVITY_UNLOADED, current_state_); |
- if (content_proxy_) |
- content_proxy_->ContentWillUnload(); |
- Observe(nullptr); |
- web_view_->EvictContent(); |
- break; |
- } |
- // Remember the last requested state. |
- current_state_ = state; |
-} |
- |
-Activity::ActivityState WebActivity::GetCurrentState() { |
- // If the content is evicted, the state has to be UNLOADED. |
- DCHECK(!web_view_->IsContentEvicted() || |
- current_state_ == ACTIVITY_UNLOADED); |
- return current_state_; |
-} |
- |
-bool WebActivity::IsVisible() { |
- return web_view_->visible() && current_state_ != ACTIVITY_UNLOADED; |
-} |
- |
-Activity::ActivityMediaState WebActivity::GetMediaState() { |
- return current_state_ == ACTIVITY_UNLOADED ? |
- Activity::ACTIVITY_MEDIA_STATE_NONE : |
- GetActivityMediaState(GetWebContents()); |
-} |
- |
-aura::Window* WebActivity::GetWindow() { |
- return web_view_->GetWidget() ? web_view_->GetWidget()->GetNativeWindow() |
- : nullptr; |
-} |
- |
-content::WebContents* WebActivity::GetWebContents() { |
- return web_view_->GetWebContents(); |
-} |
- |
-void WebActivity::Init() { |
- web_view_->InstallAccelerators(); |
-} |
- |
-SkColor WebActivity::GetRepresentativeColor() const { |
- return title_color_; |
-} |
- |
-base::string16 WebActivity::GetTitle() const { |
- if (!title_.empty()) |
- return title_; |
- const base::string16& title = web_view_->GetWebContents()->GetTitle(); |
- if (!title.empty()) |
- return title; |
- return base::UTF8ToUTF16(web_view_->GetWebContents()->GetVisibleURL().host()); |
-} |
- |
-gfx::ImageSkia WebActivity::GetIcon() const { |
- return icon_; |
-} |
- |
-void WebActivity::SetActivityView(ActivityView* view) { |
- DCHECK(!activity_view_); |
- activity_view_ = view; |
-} |
- |
-bool WebActivity::UsesFrame() const { |
- return true; |
-} |
- |
-views::View* WebActivity::GetContentsView() { |
- return web_view_; |
-} |
- |
-gfx::ImageSkia WebActivity::GetOverviewModeImage() { |
- if (content_proxy_.get()) |
- return content_proxy_->GetContentImage(); |
- return gfx::ImageSkia(); |
-} |
- |
-void WebActivity::PrepareContentsForOverview() { |
- // Turn on fast resizing to avoid re-laying out the web contents when |
- // entering / exiting overview mode and the content is visible. |
- if (!content_proxy_.get()) |
- web_view_->SetFastResize(true); |
-} |
- |
-void WebActivity::ResetContentsView() { |
- // Turn on fast resizing to avoid re-laying out the web contents when |
- // entering / exiting overview mode and the content is visible. |
- if (!content_proxy_.get()) { |
- web_view_->SetFastResize(false); |
- web_view_->Layout(); |
- } |
-} |
- |
-void WebActivity::TitleWasSet(content::NavigationEntry* entry, |
- bool explicit_set) { |
- if (activity_view_) |
- activity_view_->UpdateTitle(); |
-} |
- |
-void WebActivity::DidNavigateMainFrame( |
- const content::LoadCommittedDetails& details, |
- const content::FrameNavigateParams& params) { |
- // Prevent old image requests from calling back to OnDidDownloadFavicon(). |
- weak_ptr_factory_.InvalidateWeakPtrs(); |
- |
- icon_ = gfx::ImageSkia(); |
- if (activity_view_) |
- activity_view_->UpdateIcon(); |
-} |
- |
-void WebActivity::DidUpdateFaviconURL( |
- const std::vector<content::FaviconURL>& candidates) { |
- // Pick an arbitrary favicon of type FAVICON to use. |
- // TODO(pkotwicz): Do something better once the favicon code is componentized. |
- // (crbug.com/401997) |
- weak_ptr_factory_.InvalidateWeakPtrs(); |
- for (size_t i = 0; i < candidates.size(); ++i) { |
- if (candidates[i].icon_type == content::FaviconURL::FAVICON) { |
- web_view_->GetWebContents()->DownloadImage( |
- candidates[i].icon_url, |
- true, |
- 0, |
- base::Bind(&WebActivity::OnDidDownloadFavicon, |
- weak_ptr_factory_.GetWeakPtr())); |
- break; |
- } |
- } |
-} |
- |
-void WebActivity::OnDidDownloadFavicon( |
- int id, |
- int http_status_code, |
- const GURL& url, |
- const std::vector<SkBitmap>& bitmaps, |
- const std::vector<gfx::Size>& original_bitmap_sizes) { |
- icon_ = CreateFaviconImageSkia( |
- bitmaps, original_bitmap_sizes, kIconSize, nullptr); |
- if (activity_view_) |
- activity_view_->UpdateIcon(); |
-} |
- |
-void WebActivity::DidChangeThemeColor(SkColor theme_color) { |
- title_color_ = theme_color; |
- if (activity_view_) |
- activity_view_->UpdateRepresentativeColor(); |
-} |
- |
-void WebActivity::HideContentProxy() { |
- if (content_proxy_.get()) |
- content_proxy_.reset(nullptr); |
-} |
- |
-void WebActivity::ShowContentProxy() { |
- if (!content_proxy_.get()) |
- content_proxy_.reset(new ContentProxy(web_view_)); |
-} |
- |
-} // namespace athena |