15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_TAB_CONTENTS_BACKGROUND_CONTENTS_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_TAB_CONTENTS_BACKGROUND_CONTENTS_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_observer.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_registrar.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents_delegate.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents_observer.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/base/window_open_disposition.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Profile; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class SessionStorageNamespace; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SiteInstance; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This class consumes WebContents. It can host a renderer, but does not 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// have any visible display. 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BackgroundContents : public content::WebContentsDelegate, 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public content::WebContentsObserver, 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public content::NotificationObserver { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class Delegate { 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called by AddNewContents(). Asks the delegate to attach the opened 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // WebContents to a suitable container (e.g. browser) or to show it if it's 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // a popup window. If |was_blocked| is non-NULL, then |*was_blocked| will be 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // set to true if the popup gets blocked, and left unchanged otherwise. 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AddWebContents(content::WebContents* new_contents, 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowOpenDisposition disposition, 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Rect& initial_pos, 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool user_gesture, 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool* was_blocked) = 0; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~Delegate() {} 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) BackgroundContents( 473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) content::SiteInstance* site_instance, 483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) int routing_id, 493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) Delegate* delegate, 503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const std::string& partition_id, 513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) content::SessionStorageNamespace* session_storage_namespace); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~BackgroundContents(); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WebContents* web_contents() const { return web_contents_.get(); } 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual const GURL& GetURL() const; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // content::WebContentsDelegate implementation: 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void CloseContents(content::WebContents* source) OVERRIDE; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool ShouldSuppressDialogs() OVERRIDE; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DidNavigateMainFramePostCommit( 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WebContents* tab) OVERRIDE; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AddNewContents(content::WebContents* source, 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WebContents* new_contents, 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowOpenDisposition disposition, 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Rect& initial_pos, 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool user_gesture, 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool* was_blocked) OVERRIDE; 680529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual bool IsNeverVisible(content::WebContents* web_contents) OVERRIDE; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // content::WebContentsObserver implementation: 717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void RenderProcessGone(base::TerminationStatus status) OVERRIDE; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // content::NotificationObserver 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Observe(int type, 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationSource& source, 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationDetails& details) OVERRIDE; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Exposed for testing. 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BackgroundContents(); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The delegate for this BackgroundContents. 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Delegate* delegate_; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile_; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<content::WebContents> web_contents_; 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationRegistrar registrar_; 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(BackgroundContents); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This is the data sent out as the details with BACKGROUND_CONTENTS_OPENED. 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct BackgroundContentsOpenedDetails { 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The BackgroundContents object that has just been opened. 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BackgroundContents* contents; 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The name of the parent frame for these contents. 99a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& frame_name; 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The ID of the parent application (if any). 102a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& application_id; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_TAB_CONTENTS_BACKGROUND_CONTENTS_H_ 106