1 // Copyright (c) 2012 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 CHROME_BROWSER_UI_WEBUI_UBER_UBER_UI_H_ 6 #define CHROME_BROWSER_UI_WEBUI_UBER_UBER_UI_H_ 7 8 #include <string> 9 10 #include "base/memory/scoped_vector.h" 11 #include "base/values.h" 12 #include "chrome/browser/profiles/profile.h" 13 #include "content/public/browser/notification_observer.h" 14 #include "content/public/browser/notification_registrar.h" 15 #include "content/public/browser/web_ui_controller.h" 16 17 // The WebUI class for the uber page (chrome://chrome). It manages the UI for 18 // the uber page (navigation bar and so forth) as well as WebUI objects for 19 // pages that appear in the uber page. 20 class UberUI : public content::WebUIController { 21 public: 22 explicit UberUI(content::WebUI* web_ui); 23 virtual ~UberUI(); 24 25 content::WebUI* GetSubpage(const std::string& page_url); 26 27 // WebUIController implementation. 28 virtual bool OverrideHandleWebUIMessage(const GURL& source_url, 29 const std::string& message, 30 const base::ListValue& args) OVERRIDE; 31 32 // We forward these to |sub_uis_|. 33 virtual void RenderViewCreated( 34 content::RenderViewHost* render_view_host) OVERRIDE; 35 virtual void RenderViewReused( 36 content::RenderViewHost* render_view_host) OVERRIDE; 37 38 private: 39 // A map from URL origin to WebUI instance. 40 typedef std::map<std::string, content::WebUI*> SubpageMap; 41 42 // Creates and stores a WebUI for the given URL. 43 void RegisterSubpage(const std::string& page_url, 44 const std::string& page_host); 45 46 // The WebUI*s in this map are owned. 47 SubpageMap sub_uis_; 48 49 DISALLOW_COPY_AND_ASSIGN(UberUI); 50 }; 51 52 class UberFrameUI : public content::NotificationObserver, 53 public content::WebUIController { 54 public: 55 explicit UberFrameUI(content::WebUI* web_ui); 56 virtual ~UberFrameUI(); 57 58 private: 59 // content::NotificationObserver implementation. 60 virtual void Observe(int type, 61 const content::NotificationSource& source, 62 const content::NotificationDetails& details) OVERRIDE; 63 64 content::NotificationRegistrar registrar_; 65 66 DISALLOW_COPY_AND_ASSIGN(UberFrameUI); 67 }; 68 69 #endif // CHROME_BROWSER_UI_WEBUI_UBER_UBER_UI_H_ 70