improve the logic to make a header
authorSeongjun Yim <se201.yim@samsung.com>
Tue, 10 Sep 2013 10:19:34 +0000 (19:19 +0900)
committerSeongjun Yim <se201.yim@samsung.com>
Tue, 10 Sep 2013 10:19:34 +0000 (19:19 +0900)
Change-Id: I305f8fc1e0abbbf299a2d831157854d763e9bb80
Signed-off-by: Seongjun Yim <se201.yim@samsung.com>
src/controls/FWebCtrl_WebImpl.cpp

index 11560bf..2b78f55 100755 (executable)
@@ -150,23 +150,6 @@ static const int DEFAULT_LIST_ITEM_COUNT = 4;
 
 
 Eina_Bool
-AddHttpHeaderData(const Eina_Hash* pHash, const void* pKey, void* pValue, void* pUserData)
-{
-       result r = E_SUCCESS;
-
-       String key(reinterpret_cast< const char* >(pKey));
-       String value(reinterpret_cast< char* >(pValue));
-
-       SysLog(NID_WEB_CTRL, "The current value of key is %ls, value is %ls", key.GetPointer(), value.GetPointer());
-
-       r = reinterpret_cast< HttpHeader* >(pUserData)->AddField(key, value);
-       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, EINA_FALSE, r, "[%s] Propagating.", GetErrorMessage(r));
-
-       return EINA_TRUE;
-}
-
-
-Eina_Bool
 AddHttpAttributeData(const Eina_Hash* pHash, const void* pKey, void* pValue, void* pUserData)
 {
        result r = E_SUCCESS;
@@ -1124,11 +1107,26 @@ OnWebDataReceived(void* pUserData, Evas_Object* pView, void* pEventInfo)
                ILoadingListener* pLoadingListener = pImpl->GetLoadingListener();
                if (pLoadingListener)
                {
-                       const Eina_Hash* pHeader = ewk_policy_decision_response_headers_get(pPolicy);
                        HttpHeader httpHeader;
 
-                       eina_hash_foreach(pHeader, AddHttpHeaderData, &httpHeader);
-                       SysTryCatch(NID_WEB_CTRL, GetLastResult() == E_SUCCESS, , GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+                       Eina_Iterator* iterator = eina_hash_iterator_tuple_new(ewk_policy_decision_response_headers_get(pPolicy));
+                       if (iterator)
+                       {
+                               Eina_Hash_Tuple *tuple = null;
+
+                               EINA_ITERATOR_FOREACH(iterator, tuple)
+                               {
+                                       String key(reinterpret_cast< const char* >(tuple->key));
+                                       String value(reinterpret_cast< char* >(tuple->data));
+
+                                       SysSecureLog(NID_WEB_CTRL, "The current value of key is %ls, value is %ls", key.GetPointer(), value.GetPointer());
+
+                                       r = httpHeader.AddField(key, value);
+                                       SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
+                               }
+
+                               eina_iterator_free(iterator);
+                       }
 
                        pImpl->SetPolicyDecision(pLoadingListener->OnWebDataReceived(mime, httpHeader));
                }
@@ -1146,9 +1144,10 @@ OnWebDataReceived(void* pUserData, Evas_Object* pView, void* pEventInfo)
                String redirectUrl(pImpl->GetRedirectUri(url, currentUrl, mime));
                if (redirectUrl != L"")
                {
-                       pImpl->LoadUrl(redirectUrl);
                        ewk_policy_decision_ignore(pPolicy);
 
+                       pImpl->LoadUrl(redirectUrl);
+
                        return;
                }
 
@@ -1164,6 +1163,13 @@ OnWebDataReceived(void* pUserData, Evas_Object* pView, void* pEventInfo)
 
                        r = _AppControlImpl::FindAndStart(operationId, &url, &mime, null, null, null);
                        SysTryReturnVoidResult(NID_WEB_CTRL, r == E_SUCCESS || r == E_OBJ_NOT_FOUND, r, "[%s] Propagating.", GetErrorMessage(r));
+                       if (r == E_OBJ_NOT_FOUND)
+                       {
+                               String operationId(L"http://tizen.org/appcontrol/operation/download");
+
+                               r = _AppControlImpl::FindAndStart(operationId, &url, null, null, null, null);
+                               SysTryReturnVoidResult(NID_WEB_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
+                       }
 
                        return;
                }