Only dispatch tab events when there is someone listening.

This should cut down on the number of occurrences of a crash that happens in JSON serialization.

BUG=25558,26169

Review URL: http://codereview.chromium.org/341029

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@30444 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/extensions/extensions_service.cc b/chrome/browser/extensions/extensions_service.cc
index ef6d9cd..d681e83d 100644
--- a/chrome/browser/extensions/extensions_service.cc
+++ b/chrome/browser/extensions/extensions_service.cc
@@ -127,9 +127,6 @@
   // the first extension, because its members listen for loaded notifications.
   g_browser_process->resource_dispatcher_host();
 
-  // Start up the extension event routers.
-  ExtensionBrowserEventRouter::GetInstance()->Init();
-
   LoadAllExtensions();
 
   // TODO(erikkay) this should probably be deferred to a future point
@@ -508,6 +505,12 @@
       case Extension::ENABLED:
         extensions_.push_back(scoped_extension.release());
 
+        // We delay starting up the browser event router until at least one
+        // extension that needs it is loaded.
+        if (extension->HasApiPermission(Extension::kTabPermission)) {
+          ExtensionBrowserEventRouter::GetInstance()->Init();
+        }
+
         if (extension->location() != Extension::LOAD)
           extension_prefs_->MigrateToPrefs(extension);