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