Home | History | Annotate | Download | only in content
      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 
     18 class SkBitmap;
     19 
     20 namespace content {
     21 class BrowserContext;
     22 class WebContents;
     23 }
     24 
     25 namespace gfx {
     26 class Size;
     27 }
     28 
     29 namespace views {
     30 class WebView;
     31 class WidgetDelegate;
     32 }
     33 
     34 namespace athena {
     35 
     36 class AthenaWebView;
     37 class ContentProxy;
     38 
     39 class 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