Sends NetworkChangeNotifier connection type changes to Blink, to support NetInfo v3.

Design doc: https://docs.google.com/a/chromium.org/document/d/1LTk9uVMGi4kurzcF5ellsAJReTF31fFJMHrQwSVtBjc/

BUG=368358

Review URL: https://codereview.chromium.org/298803006

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@273555 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/content/renderer/net_info_helper.cc b/content/renderer/net_info_helper.cc
new file mode 100644
index 0000000..8e0d651
--- /dev/null
+++ b/content/renderer/net_info_helper.cc
@@ -0,0 +1,31 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/renderer/net_info_helper.h"
+
+namespace content {
+
+blink::WebConnectionType
+NetConnectionTypeToWebConnectionType(
+    net::NetworkChangeNotifier::ConnectionType net_type) {
+  switch (net_type) {
+    case net::NetworkChangeNotifier::CONNECTION_UNKNOWN:
+      return blink::ConnectionTypeOther;
+    case net::NetworkChangeNotifier::CONNECTION_ETHERNET:
+      return blink::ConnectionTypeEthernet;
+    case net::NetworkChangeNotifier::CONNECTION_WIFI:
+      return blink::ConnectionTypeWifi;
+    case net::NetworkChangeNotifier::CONNECTION_NONE:
+      return blink::ConnectionTypeNone;
+    case net::NetworkChangeNotifier::CONNECTION_2G:
+    case net::NetworkChangeNotifier::CONNECTION_3G:
+    case net::NetworkChangeNotifier::CONNECTION_4G:
+      return blink::ConnectionTypeCellular;
+  }
+
+  NOTREACHED();
+  return blink::ConnectionTypeNone;
+}
+
+}  // namespace content
diff --git a/content/renderer/net_info_helper.h b/content/renderer/net_info_helper.h
new file mode 100644
index 0000000..a9e19a0
--- /dev/null
+++ b/content/renderer/net_info_helper.h
@@ -0,0 +1,18 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_PUBLIC_RENDERER_NET_INFO_HELPER_H_
+#define CONTENT_PUBLIC_RENDERER_NET_INFO_HELPER_H_
+
+#include "net/base/network_change_notifier.h"
+#include "third_party/WebKit/public/platform/WebConnectionType.h"
+
+namespace content {
+
+blink::WebConnectionType NetConnectionTypeToWebConnectionType(
+    net::NetworkChangeNotifier::ConnectionType type);
+
+}  // namespace content
+
+#endif  // CONTENT_PUBLIC_RENDERER_NET_INFO_HELPER_H_
diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc
index 0ba3585..b8d82f45 100644
--- a/content/renderer/render_thread_impl.cc
+++ b/content/renderer/render_thread_impl.cc
@@ -84,6 +84,7 @@
 #include "content/renderer/media/video_capture_message_filter.h"
 #include "content/renderer/media/webrtc/peer_connection_dependency_factory.h"
 #include "content/renderer/media/webrtc_identity_service.h"
+#include "content/renderer/net_info_helper.h"
 #include "content/renderer/p2p/socket_dispatcher.h"
 #include "content/renderer/render_process_impl.h"
 #include "content/renderer/render_view_impl.h"
@@ -1358,11 +1359,15 @@
   FOR_EACH_OBSERVER(RenderProcessObserver, observers_, PluginListChanged());
 }
 
-void RenderThreadImpl::OnNetworkStateChanged(bool online) {
+void RenderThreadImpl::OnNetworkStateChanged(
+    bool online,
+    net::NetworkChangeNotifier::ConnectionType type) {
   EnsureWebKitInitialized();
   WebNetworkStateNotifier::setOnLine(online);
-  FOR_EACH_OBSERVER(RenderProcessObserver, observers_,
-      NetworkStateChanged(online));
+  FOR_EACH_OBSERVER(
+      RenderProcessObserver, observers_, NetworkStateChanged(online));
+  WebNetworkStateNotifier::setWebConnectionType(
+      NetConnectionTypeToWebConnectionType(type));
 }
 
 void RenderThreadImpl::OnTempCrashWithData(const GURL& data) {
diff --git a/content/renderer/render_thread_impl.h b/content/renderer/render_thread_impl.h
index d6c3a89..778c95b 100644
--- a/content/renderer/render_thread_impl.h
+++ b/content/renderer/render_thread_impl.h
@@ -20,6 +20,8 @@
 #include "content/common/content_export.h"
 #include "content/common/gpu/client/gpu_channel_host.h"
 #include "content/public/renderer/render_thread.h"
+#include "net/base/network_change_notifier.h"
+#include "third_party/WebKit/public/platform/WebConnectionType.h"
 #include "ui/gfx/native_widget_types.h"
 
 #if defined(OS_MACOSX)
@@ -88,6 +90,7 @@
 class MediaStreamCenter;
 class PeerConnectionDependencyFactory;
 class MidiMessageFilter;
+class NetInfoDispatcher;
 class P2PSocketDispatcher;
 class PeerConnectionTracker;
 class RendererDemuxerAndroid;
@@ -429,7 +432,8 @@
   void OnCreateNewView(const ViewMsg_New_Params& params);
   void OnTransferBitmap(const SkBitmap& bitmap, int resource_id);
   void OnPurgePluginListCache(bool reload_pages);
-  void OnNetworkStateChanged(bool online);
+  void OnNetworkStateChanged(bool online,
+                             net::NetworkChangeNotifier::ConnectionType type);
   void OnGetAccessibilityTree();
   void OnTempCrashWithData(const GURL& data);
   void OnUpdateTimezone();
diff --git a/content/renderer/web_preferences.cc b/content/renderer/web_preferences.cc
index 3500236..33a0004 100644
--- a/content/renderer/web_preferences.cc
+++ b/content/renderer/web_preferences.cc
@@ -5,6 +5,8 @@
 #include "content/public/renderer/web_preferences.h"
 
 #include "base/strings/utf_string_conversions.h"
+#include "content/renderer/net_info_helper.h"
+#include "third_party/WebKit/public/platform/WebConnectionType.h"
 #include "third_party/WebKit/public/platform/WebString.h"
 #include "third_party/WebKit/public/platform/WebURL.h"
 #include "third_party/WebKit/public/web/WebKit.h"
@@ -325,6 +327,8 @@
 #endif
 
   WebNetworkStateNotifier::setOnLine(prefs.is_online);
+  WebNetworkStateNotifier::setWebConnectionType(
+      NetConnectionTypeToWebConnectionType(prefs.connection_type));
   settings->setPinchVirtualViewportEnabled(
       prefs.pinch_virtual_viewport_enabled);