Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2264)

Unified Diff: athena/content/web_activity.cc

Issue 863033002: Delete athena/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « athena/content/web_activity.h ('k') | athena/content/web_activity_helpers.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « athena/content/web_activity.h ('k') | athena/content/web_activity_helpers.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698