native/jcef_helper.cpp [150:186]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    if (message->GetName() == "AddMessageRouter") {
      CefRefPtr<CefListValue> args = message->GetArgumentList();
      CefMessageRouterConfig config;
      config.js_query_function = args->GetString(0);
      config.js_cancel_function = args->GetString(1);

      // only add a new message router if it wasn't already created
      if (message_router_.find(config) != message_router_.end()) {
        return true;
      }

      CefRefPtr<CefMessageRouterRendererSide> router =
          CefMessageRouterRendererSide::Create(config);
      message_router_.insert(std::make_pair(config, router));
      return true;

    } else if (message->GetName() == "RemoveMessageRouter") {
      CefRefPtr<CefListValue> args = message->GetArgumentList();
      CefMessageRouterConfig config;
      config.js_query_function = args->GetString(0);
      config.js_cancel_function = args->GetString(1);

      message_router_.erase(config);
      return true;
    }

    bool handled = false;
    std::map<CefMessageRouterConfig, CefRefPtr<CefMessageRouterRendererSide>,
             cmpCfg>::iterator iter;
    for (iter = message_router_.begin(); iter != message_router_.end();
         iter++) {
      handled = iter->second->OnProcessMessageReceived(browser, frame,
                                                       source_process, message);
      if (handled)
        break;
    }
    return handled;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



remote/handlers/app/HelperApp.cpp [98:134]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  if (message->GetName() == "AddMessageRouter") {
    CefRefPtr<CefListValue> args = message->GetArgumentList();
    CefMessageRouterConfig config;
    config.js_query_function = args->GetString(0);
    config.js_cancel_function = args->GetString(1);

    // only add a new message router if it wasn't already created
    if (message_router_.find(config) != message_router_.end()) {
      return true;
    }

    CefRefPtr<CefMessageRouterRendererSide> router =
        CefMessageRouterRendererSide::Create(config);
    message_router_.insert(std::make_pair(config, router));
    return true;

  } else if (message->GetName() == "RemoveMessageRouter") {
    CefRefPtr<CefListValue> args = message->GetArgumentList();
    CefMessageRouterConfig config;
    config.js_query_function = args->GetString(0);
    config.js_cancel_function = args->GetString(1);

    message_router_.erase(config);
    return true;
  }

  bool handled = false;
  std::map<CefMessageRouterConfig, CefRefPtr<CefMessageRouterRendererSide>,
           cmpCfg>::iterator iter;
  for (iter = message_router_.begin(); iter != message_router_.end();
       iter++) {
    handled = iter->second->OnProcessMessageReceived(browser, frame,
                                                     source_process, message);
    if (handled)
      break;
  }
  return handled;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



