1a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// found in the LICENSE file. 4a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 5a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#ifndef CONTENT_BROWSER_FRAME_HOST_RENDER_FRAME_HOST_DELEGATE_H_ 6a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#define CONTENT_BROWSER_FRAME_HOST_RENDER_FRAME_HOST_DELEGATE_H_ 7a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include <vector> 9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 10c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "base/basictypes.h" 11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/i18n/rtl.h" 12a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "content/common/content_export.h" 13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/common/frame_message_enums.h" 14c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "content/public/common/javascript_message_type.h" 15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/public/common/media_stream_request.h" 165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "net/http/http_response_headers.h" 17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(OS_WIN) 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/gfx/native_widget_types.h" 20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 21c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 22c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochclass GURL; 23a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 24a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)namespace IPC { 25a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class Message; 26a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 27a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 28a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)namespace content { 29a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class RenderFrameHost; 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class WebContents; 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdochstruct AXEventNotificationDetails; 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)struct ContextMenuParams; 336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)struct TransitionLayerData; 34a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 35a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// An interface implemented by an object interested in knowing about the state 36a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// of the RenderFrameHost. 37a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class CONTENT_EXPORT RenderFrameHostDelegate { 38a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) public: 39a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // This is used to give the delegate a chance to filter IPC messages. 40a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual bool OnMessageReceived(RenderFrameHost* render_frame_host, 41a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const IPC::Message& message); 42a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 43c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Gets the last committed URL. See WebContents::GetLastCommittedURL for a 44c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // description of the semantics. 45c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual const GURL& GetMainFrameLastCommittedURL() const; 46c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 47c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // A message was added to to the console. 48c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual bool AddMessageToConsole(int32 level, 49c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const base::string16& message, 50c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch int32 line_no, 51c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const base::string16& source_id); 52c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 53a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Informs the delegate whenever a RenderFrameHost is created. 54a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void RenderFrameCreated(RenderFrameHost* render_frame_host) {} 55a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 56a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Informs the delegate whenever a RenderFrameHost is deleted. 57a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void RenderFrameDeleted(RenderFrameHost* render_frame_host) {} 58a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The top-level RenderFrame began loading a new page. This corresponds to 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Blink's notion of the throbber starting. 61effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // |to_different_document| will be true unless the load is a fragment 62effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // navigation, or triggered by history.pushState/replaceState. 63effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual void DidStartLoading(RenderFrameHost* render_frame_host, 64effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch bool to_different_document) {} 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 66effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // The RenderFrameHost has been swapped out. 67effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual void SwappedOut(RenderFrameHost* render_frame_host) {} 68effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Notification that the navigation on the main frame is blocked waiting 70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // for transition to occur. 715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void DidDeferAfterResponseStarted( 726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const TransitionLayerData& transition_data) {} 73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Used to query whether the navigation transition will be handled. 75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual bool WillHandleDeferAfterResponseStarted(); 76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Notification that a worker process has crashed. 785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void WorkerCrashed(RenderFrameHost* render_frame_host) {} 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // A context menu should be shown, to be built using the context information 815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // provided in the supplied params. 825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void ShowContextMenu(RenderFrameHost* render_frame_host, 835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const ContextMenuParams& params) {} 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 85c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // A JavaScript message, confirmation or prompt should be shown. 86010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void RunJavaScriptMessage(RenderFrameHost* render_frame_host, 87c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const base::string16& message, 88c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const base::string16& default_prompt, 89c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const GURL& frame_url, 90c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch JavaScriptMessageType type, 91c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch IPC::Message* reply_msg) {} 92c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 93010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void RunBeforeUnloadConfirm(RenderFrameHost* render_frame_host, 94c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const base::string16& message, 95c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch bool is_reload, 96c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch IPC::Message* reply_msg) {} 97c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 985c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Another page accessed the top-level initial empty document, which means it 995c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // is no longer safe to display a pending URL without risking a URL spoof. 1005c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual void DidAccessInitialDocument() {} 1015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 102010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // The frame set its opener to null, disowning it for the lifetime of the 103010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // window. Only called for the top-level frame. 104010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void DidDisownOpener(RenderFrameHost* render_frame_host) {} 105010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 106010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // The onload handler in the frame has completed. Only called for the top- 107010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // level frame. 108010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void DocumentOnLoadCompleted(RenderFrameHost* render_frame_host) {} 109010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 110cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // The page's title was changed and should be updated. Only called for the 111cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // top-level frame. 112cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void UpdateTitle(RenderFrameHost* render_frame_host, 113cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) int32 page_id, 114cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const base::string16& title, 115cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::i18n::TextDirection title_direction) {} 116cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 117cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // The page's encoding was changed and should be updated. Only called for the 118cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // top-level frame. 119cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void UpdateEncoding(RenderFrameHost* render_frame_host, 120cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const std::string& encoding) {} 121cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Return this object cast to a WebContents, if it is one. If the object is 1235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // not a WebContents, returns NULL. 1245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual WebContents* GetAsWebContents(); 1255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 126116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // The render frame has requested access to media devices listed in 127116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // |request|, and the client should grant or deny that permission by 128116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // calling |callback|. 129116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void RequestMediaAccessPermission( 130116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const MediaStreamRequest& request, 131116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const MediaResponseCallback& callback); 132116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Checks if we have permission to access the microphone or camera. Note that 1341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // this does not query the user. |type| must be MEDIA_DEVICE_AUDIO_CAPTURE 1351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // or MEDIA_DEVICE_VIDEO_CAPTURE. 1361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual bool CheckMediaAccessPermission(const GURL& security_origin, 1371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MediaStreamType type); 1381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 139116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Get the accessibility mode for the WebContents that owns this frame. 140116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual AccessibilityMode GetAccessibilityMode() const; 141116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 142116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Invoked when an accessibility event is received from the renderer. 143116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void AccessibilityEventReceived( 144116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::vector<AXEventNotificationDetails>& details) {} 145116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Find a guest RenderFrameHost by its browser plugin instance id. 1471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual RenderFrameHost* GetGuestByInstanceID( 1481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int browser_plugin_instance_id); 1491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 150116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(OS_WIN) 151116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Returns the frame's parent's NativeViewAccessible. 152116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual gfx::NativeViewAccessible GetParentNativeViewAccessible(); 153116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 154116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 155a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) protected: 156a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual ~RenderFrameHostDelegate() {} 157a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}; 158a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 159a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} // namespace content 160a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 161a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif // CONTENT_BROWSER_FRAME_HOST_RENDER_FRAME_HOST_DELEGATE_H_ 162