Change the way tabs work in the OOPHM UI:
 - If the browser plugin supports stable tab identifiers across refreshes,
   that is used to choose which tabs are created in the UI, with one OOPHM
   tab corresponding to one browser tab.  If the browser plugin does not
   support tab identifiers (and none currently do), then the combination of
   user agent, the base URL (ignoring query params and hash locations), and
   the host of the connecting browser are used to select a tab.  In this case,
   multiple tabs in the same browser will be treated as several simultaneously
   open sessions within one tab (see below).
 - When a tab is reloaded or where the plugin does not support tab identifiers,
   a session, identified by the timestamp of when it was created, groups
   modules on the same page together.  A reload will generate a new session,
   with the logs still avaialble by selecting the session in a dropdown box.
   Within a session, individual instances of modules (which may be the same
   module loaded multiple times, including dynamically adding/dropping
   modules) are identified in a separate dropdown box.  Disconnected modules
   and sessions with no active modules are identified in the dropdown boxes
   by gray italic text.
 - The usual case of only one module on a page means that sessions will
   represent refreshes of the page (once tab identifiers are supported, until
   then they also represent multiple instances of the application running in
   the same browser) and there will be no module dropdown.
 - Due to limitations from passing control through code shared with legacy
   hosted mode, there is still no way to close a module while it is still
   connected -- the browser will have to disconnect before it can be closed.

Patch by: jat
Review by: rjrjr



git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@5996 8db76d5a-ed1c-0410-87a9-c151d255dfc7
23 files changed