Add IPC::Sender and GetRoutingID() to WebContents for convenience and safety.

Code that is or has a WebContentsObserver can already use safe
versions of Send() and GetRoutingID() that perform NULL checks and
delete the Message object and return MSG_ROUTING_NONE when
appropriate.  This brings the same thing to code that has just a
WebContents.

BUG=none


Review URL: https://chromiumcodereview.appspot.com/10830337

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@151880 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index 32ff95d..cee3043 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -751,6 +751,13 @@
   return render_manager_.current_host();
 }
 
+int WebContentsImpl::GetRoutingID() const {
+  if (!GetRenderViewHost())
+    return MSG_ROUTING_NONE;
+
+  return GetRenderViewHost()->GetRoutingID();
+}
+
 RenderWidgetHostView* WebContentsImpl::GetRenderWidgetHostView() const {
   return render_manager_.GetRenderWidgetHostView();
 }
@@ -1449,6 +1456,15 @@
   return new_contents;
 }
 
+bool WebContentsImpl::Send(IPC::Message* message) {
+  if (!GetRenderViewHost()) {
+    delete message;
+    return false;
+  }
+
+  return GetRenderViewHost()->Send(message);
+}
+
 bool WebContentsImpl::NavigateToPendingEntry(
     NavigationController::ReloadType reload_type) {
   return NavigateToEntry(
@@ -1559,9 +1575,9 @@
     NOTREACHED();
     return;
   }
-  rvh->Send(new ViewMsg_SetHistoryLengthAndPrune(rvh->GetRoutingID(),
-                                                 history_length,
-                                                 minimum_page_id));
+  Send(new ViewMsg_SetHistoryLengthAndPrune(GetRoutingID(),
+                                            history_length,
+                                            minimum_page_id));
 }
 
 void WebContentsImpl::FocusThroughTabTraversal(bool reverse) {
@@ -1646,14 +1662,12 @@
 
 void WebContentsImpl::SetOverrideEncoding(const std::string& encoding) {
   SetEncoding(encoding);
-  GetRenderViewHostImpl()->Send(new ViewMsg_SetPageEncoding(
-      GetRenderViewHost()->GetRoutingID(), encoding));
+  Send(new ViewMsg_SetPageEncoding(GetRoutingID(), encoding));
 }
 
 void WebContentsImpl::ResetOverrideEncoding() {
   encoding_.clear();
-  GetRenderViewHostImpl()->Send(new ViewMsg_ResetPageEncodingToDefault(
-      GetRenderViewHost()->GetRoutingID()));
+  Send(new ViewMsg_ResetPageEncodingToDefault(GetRoutingID()));
 }
 
 content::RendererPreferences* WebContentsImpl::GetMutableRendererPrefs() {
@@ -1835,13 +1849,12 @@
 
 void WebContentsImpl::DidChooseColorInColorChooser(int color_chooser_id,
                                                    SkColor color) {
-  GetRenderViewHost()->Send(new ViewMsg_DidChooseColorResponse(
-      GetRenderViewHost()->GetRoutingID(), color_chooser_id, color));
+  Send(new ViewMsg_DidChooseColorResponse(
+      GetRoutingID(), color_chooser_id, color));
 }
 
 void WebContentsImpl::DidEndColorChooser(int color_chooser_id) {
-  GetRenderViewHost()->Send(new ViewMsg_DidEndColorChooser(
-      GetRenderViewHost()->GetRoutingID(), color_chooser_id));
+  Send(new ViewMsg_DidEndColorChooser(GetRoutingID(), color_chooser_id));
   if (delegate_)
     delegate_->DidEndColorChooser();
   color_chooser_ = NULL;
@@ -2452,7 +2465,7 @@
 
   if (entry->IsViewSourceMode()) {
     // Put the renderer in view source mode.
-    static_cast<RenderViewHostImpl*>(render_view_host)->Send(
+    render_view_host->Send(
         new ViewMsg_EnableViewSourceMode(render_view_host->GetRoutingID()));
   }
 
@@ -2846,8 +2859,7 @@
   // In most cases, we receive this from a swapped out RenderViewHost.
   // It is possible to receive it from one that has just been swapped in,
   // in which case we might as well deliver the message anyway.
-  GetRenderViewHost()->Send(new ViewMsg_PostMessageEvent(
-      GetRenderViewHost()->GetRoutingID(), new_params));
+  Send(new ViewMsg_PostMessageEvent(GetRoutingID(), new_params));
 }
 
 void WebContentsImpl::RunJavaScriptMessage(