Beispiel #1
0
AP_MSG_HANDLER_METHOD(BrowserInfoModule, BrowserInfo_BeginTrackCoordinates)
{
  ApHandle hContext = pMsg->hContext;

  String sType = pMsg->kvSignature[Msg_BrowserInfo_BeginTrackCoordinates_Signature_Type].getString();
  String sVersion = pMsg->kvSignature[Msg_BrowserInfo_BeginTrackCoordinates_Signature_Version].getString();
#if defined(WIN32)
  int nWin32HWND = pMsg->kvSignature[Msg_BrowserInfo_BeginTrackCoordinates_Signature_Win32HWND].getInt();
#endif // defined(WIN32)

  // sVersion
  // FF 4.0.1: Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1

  Apollo::WindowHandle win;
  if (0) {
#if defined(WIN32)
  } else if (nWin32HWND != 0) {
    win = (HWND) nWin32HWND;
  } else if (sType == Msg_BrowserInfo_BeginTrackCoordinates_Signature_Type_Firefox && sVersion.contains("Firefox/3.")) {
    win = Firefox3Finder::GetToplevelWindow(pMsg->kvSignature);
  } else if (sType == Msg_BrowserInfo_BeginTrackCoordinates_Signature_Type_Firefox) {
    win = Firefox4Finder::GetToplevelWindow(pMsg->kvSignature);
  } else if (sType == Msg_BrowserInfo_BeginTrackCoordinates_Signature_Type_Chrome) {
    win = ChromeFinder::GetToplevelWindow(pMsg->kvSignature);
#endif // defined(WIN32)
  }

  if (!win.isValid()) {
    apLog_Error((LOG_CHANNEL, LOG_CONTEXT, "No valid browser window, type=%s", _sz(sType)));
  } else {

    Browser* pBrowser = 0;
    browsers_.Get(win, pBrowser);
    if (pBrowser == 0) {

      if (0) {
#if defined(WIN32)
      } else if (nWin32HWND != 0) {
        pBrowser = new Win32Browser(win);
      } else if (sType == Msg_BrowserInfo_BeginTrackCoordinates_Signature_Type_Firefox && sVersion.contains("Firefox/3.")) {
        pBrowser = new Firefox3Win32Browser(win);
      } else if (sType == Msg_BrowserInfo_BeginTrackCoordinates_Signature_Type_Firefox) {
        pBrowser = new Firefox4Win32Browser(win);
      } else if (sType == Msg_BrowserInfo_BeginTrackCoordinates_Signature_Type_Chrome) {
        pBrowser = new ChromeWin32Browser(win);
#endif // defined(WIN32)
      }

      if (pBrowser == 0) {
        apLog_Error((LOG_CHANNEL, LOG_CONTEXT, "No browser for platformand type=%s", _sz(sType)));
      } else {
        browsers_.Set(win, pBrowser);

        StartTimer();
      }
    }
    if (pBrowser != 0) {
      pBrowser->AddContext(hContext);
    }

  }

  pMsg->apStatus = ApMessage::Ok;
}