Gpu: Unregister channel name in the gpu process when a channel closes.
Gpu: Unregister channel name in the gpu process when a channel closes.

The Gpu channel name is derived from the GPU pid and the renderer id. When a render view crashes and is reloaded, a channel with the same pid and renderer id will be created in the gpu process, which causes this check to fail:

[36009:263:2890157912966265:FATAL:/Volumes/Data/thakis/chrome/src/ipc/ipc_channel_posix.cc(108)] Check failed: i == map_.end(). Creating second IPC server (fd 15) for '36009.r2' while first (fd 14) still exists
Backtrace:
	0   Chromium Framework                  0x00cafe62 base::debug::StackTrace::StackTrace() + 32
	1   Chromium Framework                  0x00cc6b20 logging::LogMessage::~LogMessage() + 64
	2   Chromium Framework                  0x017f6834 IPC::(anonymous namespace)::PipeMap::Insert(std::string const&, int) + 644
	3   Chromium Framework                  0x017f6887 IPC::AddChannelSocket(std::string const&, int) + 25
	4   Chromium Framework                  0x00b3efcb GpuChannel::Init() + 103
	5   Chromium Framework                  0x00b470ff GpuThread::OnEstablishChannel(int) + 407
	6   Chromium Framework                  0x00b4778d void DispatchToMethod<GpuThread, void (GpuThread::*)(int), int>(GpuThread*, void (GpuThread::*)(int), Tuple1<int> const&) + 65
	7   Chromium Framework                  0x00b48c52 bool IPC::MessageWithTuple<Tuple1<int> >::Dispatch<GpuThread, void (GpuThread::*)(int)>(IPC::Message const*, GpuThread*, void (GpuThread::*)(int)) + 71
	8   Chromium Framework                  0x00b472f8 GpuThread::OnControlMessageReceived(IPC::Message const&) + 146
	9   Chromium Framework                  0x001696f6 ChildThread::OnMessageReceived(IPC::Message const&) + 452
	10  Chromium Framework                  0x017f9bcc IPC::ChannelProxy::Context::OnDispatchMessage(IPC::Message const&) + 144
	11  Chromium Framework                  0x017fab64 void DispatchToMethod<IPC::ChannelProxy::Context, void (IPC::ChannelProxy::Context::*)(IPC::Message const&), IPC::Message>(IPC::ChannelProxy::Context*, void (IPC::ChannelProxy::Context::*)(IPC::Message const&), Tuple1<IPC::Message> const&) + 63
	12  Chromium Framework                  0x017fab9f RunnableMethod<IPC::ChannelProxy::Context, void (IPC::ChannelProxy::Context::*)(IPC::Message const&), Tuple1<IPC::Message> >::Run() + 57
	13  Chromium Framework                  0x00ccdc39 MessageLoop::RunTask(Task*) + 303
	14  Chromium Framework                  0x00ccdcf1 MessageLoop::DeferOrRunPendingTask(MessageLoop::PendingTask const&) + 53
	15  Chromium Framework                  0x00ccdfcf MessageLoop::DoWork() + 253
	16  Chromium Framework                  0x00d42024 base::MessagePumpCFRunLoopBase::RunWork() + 74
	17  Chromium Framework                  0x00d42069 base::MessagePumpCFRunLoopBase::RunWorkSource(void*) + 23
	18  CoreFoundation                      0x96f260fb __CFRunLoopDoSources0 + 1563
	19  CoreFoundation                      0x96f23bbf __CFRunLoopRun + 1071
	20  CoreFoundation                      0x96f23094 CFRunLoopRunSpecific + 452
	21  CoreFoundation                      0x96f22ec1 CFRunLoopRunInMode + 97
	22  HIToolbox                           0x976c2f9c RunCurrentEventLoopInMode + 392
	23  HIToolbox                           0x976c2d51 ReceiveNextEventCommon + 354
	24  HIToolbox                           0x976c2bd6 BlockUntilNextEventMatchingListInMode + 81
	25  AppKit                              0x920b5a89 _DPSNextEvent + 847
	26  AppKit                              0x920b52ca -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 156
	27  AppKit                              0x9207755b -[NSApplication run] + 821
	28  Chromium Framework                  0x00d41b66 base::MessagePumpNSApplication::DoRun(base::MessagePump::Delegate*) + 130
	29  Chromium Framework                  0x00d42155 base::MessagePumpCFRunLoopBase::Run(base::MessagePump::Delegate*) + 175
	30  Chromium Framework                  0x00cce7db MessageLoop::RunInternal() + 209
	31  Chromium Framework                  0x00cce7f5 MessageLoop::RunHandler() + 17
	32  Chromium Framework                  0x00cce859 MessageLoop::Run() + 35
	33  Chromium Framework                  0x00b466e6 GpuMain(MainFunctionParams const&) + 1123
	34  Chromium Framework                  0x00008d67 ChromeMain + 4921
	35  Chromium Helper                     0x00001f52 main + 24
	36  Chromium Helper                     0x00001f0e start + 54
	37  ???                                 0x00000003 0x0 + 3

The fix is to unregister the channel-name mapping when the GPU channel goes away.

BUG=55641
TEST=Go to a gpu-accelerated page. Enter about:crash in omnibox. Reload page. No CHECK should be printed, and the page should reload fine.

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

git-svn-id: de016e52bd170d2d4f2344f9bf92d50478b649e0@66304 0039d316-1c4b-4281-b951-d872f2087c98

Crystalnix/house-of-life-chromium,gavinp/chromium,yitian134/chromium,adobe/chromium,yitian134/chromium,yitian134/chromium,ropik/chromium,gavinp/chromium,adobe/chromium,Crystalnix/house-of-life-chromium,adobe/chromium,adobe/chromium,ropik/chromium,Crystalnix/house-of-life-chromium,ropik/chromium,gavinp/chromium,gavinp/chromium,Crystalnix/house-of-life-chromium,ropik/chromium,adobe/chromium,Crystalnix/house-of-life-chromium,Crystalnix/house-of-life-chromium,yitian134/chromium,adobe/chromium,gavinp/chromium,yitian134/chromium,Crystalnix/house-of-life-chromium,yitian134/chromium,ropik/chromium,Crystalnix/house-of-life-chromium,gavinp/chromium,gavinp/chromium,adobe/chromium,ropik/chromium,adobe/chromium,ropik/chromium,gavinp/chromium,adobe/chromium,adobe/chromium,yitian134/chromium,yitian134/chromium,ropik/chromium,Crystalnix/house-of-life-chromium,Crystalnix/house-of-life-chromium,ropik/chromium,gavinp/chromium,adobe/chromium,gavinp/chromium,yitian134/chromium,yitian134/chromium,Crystalnix/house-of-life-chromium