Home | History | Annotate | Download | only in browser
      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 #include "content/public/browser/web_contents_delegate.h"
      6 
      7 #include "base/compiler_specific.h"
      8 #include "base/logging.h"
      9 #include "base/memory/singleton.h"
     10 #include "content/public/browser/render_view_host.h"
     11 #include "content/public/browser/web_contents.h"
     12 #include "content/public/common/url_constants.h"
     13 #include "content/public/common/bindings_policy.h"
     14 #include "ui/gfx/rect.h"
     15 
     16 namespace content {
     17 
     18 WebContentsDelegate::WebContentsDelegate() {
     19 }
     20 
     21 WebContents* WebContentsDelegate::OpenURLFromTab(WebContents* source,
     22                                                  const OpenURLParams& params) {
     23   return NULL;
     24 }
     25 
     26 bool WebContentsDelegate::IsPopupOrPanel(const WebContents* source) const {
     27   return false;
     28 }
     29 
     30 bool WebContentsDelegate::CanLoadDataURLsInWebUI() const { return false; }
     31 
     32 bool WebContentsDelegate::CanOverscrollContent() const { return false; }
     33 
     34 gfx::Rect WebContentsDelegate::GetRootWindowResizerRect() const {
     35   return gfx::Rect();
     36 }
     37 
     38 bool WebContentsDelegate::ShouldSuppressDialogs() {
     39   return false;
     40 }
     41 
     42 bool WebContentsDelegate::AddMessageToConsole(WebContents* source,
     43                                               int32 level,
     44                                               const string16& message,
     45                                               int32 line_no,
     46                                               const string16& source_id) {
     47   return false;
     48 }
     49 
     50 void WebContentsDelegate::BeforeUnloadFired(WebContents* web_contents,
     51                                             bool proceed,
     52                                             bool* proceed_to_fire_unload) {
     53   *proceed_to_fire_unload = true;
     54 }
     55 
     56 bool WebContentsDelegate::ShouldFocusLocationBarByDefault(WebContents* source) {
     57   return false;
     58 }
     59 
     60 bool WebContentsDelegate::ShouldFocusPageAfterCrash() {
     61   return true;
     62 }
     63 
     64 bool WebContentsDelegate::TakeFocus(WebContents* source, bool reverse) {
     65   return false;
     66 }
     67 
     68 int WebContentsDelegate::GetExtraRenderViewHeight() const {
     69   return 0;
     70 }
     71 
     72 void WebContentsDelegate::CanDownload(
     73     RenderViewHost* render_view_host,
     74     int request_id,
     75     const std::string& request_method,
     76     const base::Callback<void(bool)>& callback) {
     77   callback.Run(true);
     78 }
     79 
     80 bool WebContentsDelegate::HandleContextMenu(
     81     const content::ContextMenuParams& params) {
     82   return false;
     83 }
     84 
     85 void WebContentsDelegate::ViewSourceForTab(WebContents* source,
     86                                            const GURL& page_url) {
     87   // Fall back implementation based entirely on the view-source scheme.
     88   // It suffers from http://crbug.com/523 and that is why browser overrides
     89   // it with proper implementation.
     90   GURL url = GURL(kViewSourceScheme + std::string(":") + page_url.spec());
     91   OpenURLFromTab(source, OpenURLParams(url, Referrer(),
     92                                        NEW_FOREGROUND_TAB,
     93                                        PAGE_TRANSITION_LINK, false));
     94 }
     95 
     96 void WebContentsDelegate::ViewSourceForFrame(WebContents* source,
     97                                              const GURL& frame_url,
     98                                              const PageState& page_state) {
     99   // Same as ViewSourceForTab, but for given subframe.
    100   GURL url = GURL(kViewSourceScheme + std::string(":") + frame_url.spec());
    101   OpenURLFromTab(source, OpenURLParams(url, Referrer(),
    102                                        NEW_FOREGROUND_TAB,
    103                                        PAGE_TRANSITION_LINK, false));
    104 }
    105 
    106 bool WebContentsDelegate::PreHandleKeyboardEvent(
    107     WebContents* source,
    108     const NativeWebKeyboardEvent& event,
    109     bool* is_keyboard_shortcut) {
    110   return false;
    111 }
    112 
    113 bool WebContentsDelegate::CanDragEnter(
    114     WebContents* source,
    115     const DropData& data,
    116     WebKit::WebDragOperationsMask operations_allowed) {
    117   return true;
    118 }
    119 
    120 bool WebContentsDelegate::OnGoToEntryOffset(int offset) {
    121   return true;
    122 }
    123 
    124 bool WebContentsDelegate::ShouldCreateWebContents(
    125     WebContents* web_contents,
    126     int route_id,
    127     WindowContainerType window_container_type,
    128     const string16& frame_name,
    129     const GURL& target_url,
    130     const Referrer& referrer,
    131     WindowOpenDisposition disposition,
    132     const WebKit::WebWindowFeatures& features,
    133     bool user_gesture,
    134     bool opener_suppressed) {
    135   return true;
    136 }
    137 
    138 JavaScriptDialogManager* WebContentsDelegate::GetJavaScriptDialogManager() {
    139   return NULL;
    140 }
    141 
    142 bool WebContentsDelegate::IsFullscreenForTabOrPending(
    143     const WebContents* web_contents) const {
    144   return false;
    145 }
    146 
    147 content::ColorChooser* WebContentsDelegate::OpenColorChooser(
    148     WebContents* web_contents, SkColor color) {
    149   return NULL;
    150 }
    151 
    152 void WebContentsDelegate::RequestMediaAccessPermission(
    153     WebContents* web_contents,
    154     const MediaStreamRequest& request,
    155     const MediaResponseCallback& callback) {
    156   callback.Run(MediaStreamDevices(), scoped_ptr<MediaStreamUI>());
    157 }
    158 
    159 bool WebContentsDelegate::RequestPpapiBrokerPermission(
    160     WebContents* web_contents,
    161     const GURL& url,
    162     const base::FilePath& plugin_path,
    163     const base::Callback<void(bool)>& callback) {
    164   return false;
    165 }
    166 
    167 WebContentsDelegate::~WebContentsDelegate() {
    168   while (!attached_contents_.empty()) {
    169     WebContents* web_contents = *attached_contents_.begin();
    170     web_contents->SetDelegate(NULL);
    171   }
    172   DCHECK(attached_contents_.empty());
    173 }
    174 
    175 void WebContentsDelegate::Attach(WebContents* web_contents) {
    176   DCHECK(attached_contents_.find(web_contents) == attached_contents_.end());
    177   attached_contents_.insert(web_contents);
    178 }
    179 
    180 void WebContentsDelegate::Detach(WebContents* web_contents) {
    181   DCHECK(attached_contents_.find(web_contents) != attached_contents_.end());
    182   attached_contents_.erase(web_contents);
    183 }
    184 
    185 }  // namespace content
    186