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 // WebUIController implementation. 26 virtual bool OverrideHandleWebUIMessage(const GURL& source_url, 27 const std::string& message, 28 const ListValue& args) OVERRIDE; 29 30 // We forward these to |sub_uis_|. 31 virtual void RenderViewCreated( 32 content::RenderViewHost* render_view_host) OVERRIDE; 33 virtual void RenderViewReused( 34 content::RenderViewHost* render_view_host) OVERRIDE; 35 36 private: 37 // A map from URL origin to WebUI instance. 38 typedef std::map<std::string, content::WebUI*> SubpageMap; 39 40 // Creates and stores a WebUI for the given URL. 41 void RegisterSubpage(const std::string& page_url); 42 43 // The WebUI*s in this map are owned. 44 SubpageMap sub_uis_; 45 46 DISALLOW_COPY_AND_ASSIGN(UberUI); 47 }; 48 49 class UberFrameUI : public content::NotificationObserver, 50 public content::WebUIController { 51 public: 52 explicit UberFrameUI(content::WebUI* web_ui); 53 virtual ~UberFrameUI(); 54 55 private: 56 // content::NotificationObserver implementation. 57 virtual void Observe(int type, 58 const content::NotificationSource& source, 59 const content::NotificationDetails& details) OVERRIDE; 60 61 content::NotificationRegistrar registrar_; 62 63 DISALLOW_COPY_AND_ASSIGN(UberFrameUI); 64 }; 65 66 #endif // CHROME_BROWSER_UI_WEBUI_UBER_UBER_UI_H_ 67