Skip to content

Commit

Permalink
Add Huawei Browser detection. (#472)
Browse files Browse the repository at this point in the history
  • Loading branch information
itsalongstory authored and fnando committed Jul 8, 2020
1 parent ebc508b commit daf2181
Show file tree
Hide file tree
Showing 8 changed files with 57 additions and 0 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
- Fix issue with `Browser::Base#safari?` matching full version
- Add Maxthon detection
- Add Google Search App detection
- Add Huawei Browser detection

## 4.2.0

Expand Down
5 changes: 5 additions & 0 deletions lib/browser/base.rb
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,11 @@ def samsung_browser?(expected_version = nil)
ua =~ /SamsungBrowser/ && detect_version?(full_version, expected_version)
end

def huawei_browser?(expected_version = nil)
HuaweiBrowser.new(ua).match? &&
detect_version?(full_version, expected_version)
end

def maxthon?(expected_version = nil)
Maxthon.new(ua).match? && detect_version?(full_version, expected_version)
end
Expand Down
2 changes: 2 additions & 0 deletions lib/browser/browser.rb
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
require_relative "snapchat"
require_relative "duck_duck_go"
require_relative "samsung_browser"
require_relative "huawei_browser"
require_relative "maxthon"
require_relative "google_search_app"

Expand Down Expand Up @@ -77,6 +78,7 @@ def self.matchers
Sputnik, # must be placed before Chrome and Safari
DuckDuckGo, # must be placed before Chrome and Safari
SamsungBrowser, # must be placed before Chrome and Safari
HuaweiBrowser, # must be placed before Chrome and Safari
Maxthon, # must be placed before Chrome and Safari
GoogleSearchApp, # must be placed before Chrome and Safari
Chrome,
Expand Down
1 change: 1 addition & 0 deletions lib/browser/chrome.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ def match?
!yandex? &&
!sputnik? &&
!samsung_browser? &&
!huawei_browser? &&
!maxthon? &&
!google_search_app?
end
Expand Down
21 changes: 21 additions & 0 deletions lib/browser/huawei_browser.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# frozen_string_literal: true

module Browser
class HuaweiBrowser < Base
def id
:huawei_browser
end

def name
"Huawei Browser"
end

def full_version
ua[%r{(?:HuaweiBrowser)/([\d.]+)}i, 1] || "0.0"
end

def match?
ua =~ /HuaweiBrowser/i
end
end
end
1 change: 1 addition & 0 deletions lib/browser/safari.rb
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ def match?
!edge? &&
!chrome? &&
!samsung_browser? &&
!huawei_browser? &&
!duck_duck_go? &&
!yandex? &&
!sputnik? &&
Expand Down
1 change: 1 addition & 0 deletions test/ua.yml
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,7 @@ SAFARI_IPHONE_WEBAPP_MODE: "Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_2 like Mac O
SAMSUNG: "Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; SAMSUNG-SGH-I497 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30"
SAMSUNG_BROWSER: "Mozilla/5.0 (Linux; Android 10; SAMSUNG SM-N960U) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/11.1 Chrome/75.0.3770.143 Mobile Safari/537.36"
SAMSUNG_CHROME: "Mozilla/5.0 (Linux; Android 4.4.2; en-gb; SAMSUNG GT-I9195/I9195XXUCNEA Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Mobile Safari/537.36"
HUAWEI_BROWSER: "Mozilla/5.0 (Linux; Android 10; HMA-AL00; HMSCore 5.0.0.304; GMSCore 19.6.29) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 HuaweiBrowser/10.1.2.300 Mobile Safari/537.36"
SMART_TV: "Mozilla/5.0 (SmartHub; SMART-TV; U; Linux/SmartTV) AppleWebKit/531.2+ (KHTML, like Gecko) WebBrowser/1.0 SmartTV Safari/531.2+"
SNAPCHAT: Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Snapchat/10.69.5.72 (iPhone10,3; iOS 13.2.2; gzip)
SNAPCHAT_EMPTY_STRING_VERSION: "Mozilla/5.0 (Linux; Android 9; SM-N960U Build/PPR1.180610.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.96 Mobile Safari/537.36Snapchat10.70.0.0 (SM-N960U; Android 9#N960USQS3CSJ2#28; gzip)"
Expand Down
25 changes: 25 additions & 0 deletions test/unit/huawei_browser_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# frozen_string_literal: true

require "test_helper"

class HuaweiBrowserTest < Minitest::Test
test "detects Huawei Browser" do
browser = Browser.new(Browser["HUAWEI_BROWSER"])
assert browser.huawei_browser?
refute browser.safari?
refute browser.chrome?
assert_equal "Huawei Browser", browser.name
assert_equal :huawei_browser, browser.id
end

test "detects correct version" do
browser = Browser.new(Browser["HUAWEI_BROWSER"])
assert_equal "10.1.2.300", browser.full_version
assert_equal "10", browser.version
end

test "detects version by range" do
browser = Browser.new(Browser["HUAWEI_BROWSER"])
assert browser.huawei_browser?(%w[>=10 <11])
end
end

0 comments on commit daf2181

Please sign in to comment.