1f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// found in the LICENSE file.
4f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
5f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "athena/content/app_activity.h"
6f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
7f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "athena/activity/public/activity_manager.h"
803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "athena/content/app_activity_registry.h"
91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "athena/content/content_proxy.h"
1003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "athena/content/public/app_registry.h"
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "athena/wm/public/window_list_provider.h"
121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "athena/wm/public/window_manager.h"
13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "content/public/browser/web_contents.h"
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/browser/app_window/app_window.h"
151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/aura/window.h"
16f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "ui/views/controls/webview/webview.h"
1703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "ui/views/widget/widget.h"
18f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
19f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)namespace athena {
20f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
21f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// TODO(mukai): specifies the same accelerators of WebActivity.
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciAppActivity::AppActivity(extensions::AppWindow* app_window,
231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                         views::WebView* web_view)
241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    : app_id_(app_window->extension_id()),
251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      web_view_(web_view),
2603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      current_state_(ACTIVITY_UNLOADED),
2703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      app_activity_registry_(NULL) {
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DCHECK_EQ(app_window->web_contents(), web_view->GetWebContents());
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  Observe(app_window->web_contents());
30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciscoped_ptr<ContentProxy> AppActivity::GetContentProxy() {
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Note: After this call, the content is still valid because the contents
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // destruction will destroy this |AppActivity| object.
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (content_proxy_.get())
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    content_proxy_->OnPreContentDestroyed();
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return content_proxy_.Pass();
38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)ActivityViewModel* AppActivity::GetActivityViewModel() {
41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  return this;
42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
44116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid AppActivity::SetCurrentState(Activity::ActivityState state) {
451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DCHECK_NE(state, current_state_);
461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ActivityState current_state = current_state_;
4703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // Remember the last requested state now so that a call to GetCurrentState()
4803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // returns the new state.
4903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  current_state_ = state;
5003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  switch (state) {
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    case ACTIVITY_VISIBLE:
531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      HideContentProxy();
541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      return;
55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    case ACTIVITY_INVISIBLE:
561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      if (current_state == ACTIVITY_VISIBLE)
571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        ShowContentProxy();
58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      break;
59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    case ACTIVITY_BACKGROUND_LOW_PRIORITY:
6003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      DCHECK(ACTIVITY_VISIBLE == current_state ||
6103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)             ACTIVITY_INVISIBLE == current_state);
62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      // TODO(skuhne): Do this.
63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      break;
64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    case ACTIVITY_PERSISTENT:
6503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      DCHECK_EQ(ACTIVITY_BACKGROUND_LOW_PRIORITY, current_state);
66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      // TODO(skuhne): Do this.
67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      break;
68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    case ACTIVITY_UNLOADED:
6903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      DCHECK_NE(ACTIVITY_UNLOADED, current_state);
7003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      // This will cause the application to shut down, close its windows and
7103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      // delete this object. Instead a |AppActivityProxy| will be created as
7203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      // place holder.
7303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      if (app_activity_registry_)
7403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)        app_activity_registry_->Unload();
75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      break;
76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
79116680a4aac90f2aa7413d9095a592090648e557Ben MurdochActivity::ActivityState AppActivity::GetCurrentState() {
801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DCHECK(web_view_ || ACTIVITY_UNLOADED == current_state_);
81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return current_state_;
82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
84116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool AppActivity::IsVisible() {
851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return web_view_ &&
861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci         web_view_->visible() &&
871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci         current_state_ != ACTIVITY_UNLOADED;
88116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
90116680a4aac90f2aa7413d9095a592090648e557Ben MurdochActivity::ActivityMediaState AppActivity::GetMediaState() {
91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // TODO(skuhne): The function GetTabMediaStateForContents(WebContents),
92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // and the AudioStreamMonitor needs to be moved from Chrome into contents to
93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // make it more modular and so that we can use it from here.
94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return Activity::ACTIVITY_MEDIA_STATE_NONE;
95116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
96116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
9703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)aura::Window* AppActivity::GetWindow() {
9803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  return !web_view_ ? NULL : web_view_->GetWidget()->GetNativeWindow();
9903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}
10003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccicontent::WebContents* AppActivity::GetWebContents() {
1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return !web_view_ ? NULL : web_view_->GetWebContents();
1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
105f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void AppActivity::Init() {
1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DCHECK(app_activity_registry_);
1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  Activity* app_proxy = app_activity_registry_->unloaded_activity_proxy();
1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (app_proxy) {
1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    // Note: At this time the |AppActivity| did not get registered to the
1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    // |ResourceManager| - so we can move it around if needed.
1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    WindowListProvider* window_list_provider =
1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        WindowManager::Get()->GetWindowListProvider();
1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    window_list_provider->StackWindowFrontOf(app_proxy->GetWindow(),
1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                             GetWindow());
1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    Activity::Delete(app_proxy);
1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    // With the removal the object, the proxy should be deleted.
1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    DCHECK(!app_activity_registry_->unloaded_activity_proxy());
1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
119f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
120f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
121116680a4aac90f2aa7413d9095a592090648e557Ben MurdochSkColor AppActivity::GetRepresentativeColor() const {
122f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // TODO(sad): Compute the color from the favicon.
123f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  return SK_ColorGRAY;
124f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
125f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
126116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbase::string16 AppActivity::GetTitle() const {
127f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  return web_view_->GetWebContents()->GetTitle();
128f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
129f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
1301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccigfx::ImageSkia AppActivity::GetIcon() const {
1311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return gfx::ImageSkia();
1321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
1331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
134116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool AppActivity::UsesFrame() const {
135116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return false;
136116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
137116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciviews::Widget* AppActivity::CreateWidget() {
1391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Make sure the content gets properly shown.
1401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (current_state_ == ACTIVITY_VISIBLE) {
1411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    HideContentProxy();
1421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  } else if (current_state_ == ACTIVITY_INVISIBLE) {
1431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    ShowContentProxy();
1441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  } else {
1451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    // If not previously specified, we change the state now to invisible..
146116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    SetCurrentState(ACTIVITY_INVISIBLE);
147f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  }
1481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  RegisterActivity();
1491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return web_view_->GetWidget();
150f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
151f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
1521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciviews::View* AppActivity::GetContentsView() {
1531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return web_view_;
154116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
155116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
156116680a4aac90f2aa7413d9095a592090648e557Ben Murdochgfx::ImageSkia AppActivity::GetOverviewModeImage() {
1571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (content_proxy_.get())
1581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    return content_proxy_->GetContentImage();
1591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return gfx::ImageSkia();
1601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
1611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid AppActivity::PrepareContentsForOverview() {
1631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Turn on fast resizing to avoid re-laying out the web contents when
1641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // entering / exiting overview mode and the content is visible.
1651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (!content_proxy_.get())
1661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    web_view_->SetFastResize(true);
1671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
1681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid AppActivity::ResetContentsView() {
1701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Turn on fast resizing to avoid re-laying out the web contents when
1711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // entering / exiting overview mode and the content is visible.
1721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (!content_proxy_.get()) {
1731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    web_view_->SetFastResize(false);
1741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    web_view_->Layout();
1751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
1761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
1771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciAppActivity::AppActivity(const std::string& app_id)
1791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    : app_id_(app_id),
1801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      web_view_(NULL),
1811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      current_state_(ACTIVITY_UNLOADED),
1821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      app_activity_registry_(NULL) {
1831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
1841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciAppActivity::~AppActivity() {
1861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // If this activity is registered, we unregister it now.
1871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (app_activity_registry_)
1881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    app_activity_registry_->UnregisterAppActivity(this);
189116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
190116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
191f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void AppActivity::TitleWasSet(content::NavigationEntry* entry,
192f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                              bool explicit_set) {
193f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  ActivityManager::Get()->UpdateActivity(this);
194f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
195f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
196f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void AppActivity::DidUpdateFaviconURL(
197f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    const std::vector<content::FaviconURL>& candidates) {
198f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  ActivityManager::Get()->UpdateActivity(this);
199f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
200f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
20103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Register an |activity| with an application.
20203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Note: This should only get called once for an |app_window| of the
20303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// |activity|.
20403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)void AppActivity::RegisterActivity() {
2051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  content::WebContents* web_contents = web_view_->GetWebContents();
20603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  AppRegistry* app_registry = AppRegistry::Get();
20703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // Get the application's registry.
20803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  app_activity_registry_ = app_registry->GetAppActivityRegistry(
2091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      app_id_, web_contents->GetBrowserContext());
21003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  DCHECK(app_activity_registry_);
21103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // Register the activity.
21203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  app_activity_registry_->RegisterAppActivity(this);
21303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}
21403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
2151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid AppActivity::HideContentProxy() {
2161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  content_proxy_.reset();
2171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
2181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid AppActivity::ShowContentProxy() {
2201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (!content_proxy_.get() && web_view_)
2211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    content_proxy_.reset(new ContentProxy(web_view_, this));
2221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
2231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
224f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}  // namespace athena
225