1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef ATHENA_CONTENT_PUBLIC_WEB_ACTIVITY_H_
6#define ATHENA_CONTENT_PUBLIC_WEB_ACTIVITY_H_
7
8#include <vector>
9
10#include "athena/activity/public/activity.h"
11#include "athena/activity/public/activity_view_model.h"
12#include "base/memory/scoped_ptr.h"
13#include "base/memory/weak_ptr.h"
14#include "base/strings/string16.h"
15#include "content/public/browser/web_contents_observer.h"
16#include "ui/gfx/image/image_skia.h"
17
18class SkBitmap;
19
20namespace content {
21class BrowserContext;
22class WebContents;
23}
24
25namespace gfx {
26class Size;
27}
28
29namespace views {
30class WebView;
31class WidgetDelegate;
32}
33
34namespace athena {
35
36class AthenaWebView;
37class ContentProxy;
38
39class WebActivity : public Activity,
40                    public ActivityViewModel,
41                    public content::WebContentsObserver {
42 public:
43  WebActivity(content::BrowserContext* context,
44              const base::string16& title,
45              const GURL& gurl);
46  WebActivity(AthenaWebView* web_view);
47
48 protected:
49  virtual ~WebActivity();
50
51 // Activity:
52  virtual athena::ActivityViewModel* GetActivityViewModel() OVERRIDE;
53  virtual void SetCurrentState(ActivityState state) OVERRIDE;
54  virtual ActivityState GetCurrentState() OVERRIDE;
55  virtual bool IsVisible() OVERRIDE;
56  virtual ActivityMediaState GetMediaState() OVERRIDE;
57  virtual aura::Window* GetWindow() OVERRIDE;
58  virtual content::WebContents* GetWebContents() OVERRIDE;
59
60  // ActivityViewModel:
61  virtual void Init() OVERRIDE;
62  virtual SkColor GetRepresentativeColor() const OVERRIDE;
63  virtual base::string16 GetTitle() const OVERRIDE;
64  virtual gfx::ImageSkia GetIcon() const OVERRIDE;
65  virtual bool UsesFrame() const OVERRIDE;
66  virtual views::View* GetContentsView() OVERRIDE;
67  virtual views::Widget* CreateWidget() OVERRIDE;
68  virtual gfx::ImageSkia GetOverviewModeImage() OVERRIDE;
69  virtual void PrepareContentsForOverview() OVERRIDE;
70  virtual void ResetContentsView() OVERRIDE;
71
72  // content::WebContentsObserver:
73  virtual void DidNavigateMainFrame(
74      const content::LoadCommittedDetails& details,
75      const content::FrameNavigateParams& params) OVERRIDE;
76  virtual void TitleWasSet(content::NavigationEntry* entry,
77                           bool explicit_set) OVERRIDE;
78  virtual void DidUpdateFaviconURL(
79      const std::vector<content::FaviconURL>& candidates) OVERRIDE;
80  virtual void DidChangeThemeColor(SkColor theme_color) OVERRIDE;
81
82 private:
83  // Called when a favicon download initiated in DidUpdateFaviconURL()
84  // has completed.
85  void OnDidDownloadFavicon(
86      int id,
87      int http_status_code,
88      const GURL& url,
89      const std::vector<SkBitmap>& bitmaps,
90      const std::vector<gfx::Size>& original_bitmap_sizes);
91
92  // Hiding the contet proxy and showing the real content instead.
93  void HideContentProxy();
94
95  // Showing a content proxy instead of the real content to save resoruces.
96  void ShowContentProxy();
97
98  // Reload the content if required, and start observing it.
99  void ReloadAndObserve();
100
101  content::BrowserContext* browser_context_;
102  const base::string16 title_;
103  gfx::ImageSkia icon_;
104  const GURL url_;
105  AthenaWebView* web_view_;
106  SkColor title_color_;
107
108  // The current state for this activity.
109  ActivityState current_state_;
110
111  // The content proxy.
112  scoped_ptr<ContentProxy> content_proxy_;
113
114  base::WeakPtrFactory<WebActivity> weak_ptr_factory_;
115
116  DISALLOW_COPY_AND_ASSIGN(WebActivity);
117};
118
119}  // namespace athena
120
121#endif  // ATHENA_CONTENT_WEB_ACTIVITY_H_
122